实现并发最直接的方式是在操作系统级别使用进程。
并发任务彼此隔离的编程语言,被称为函数型语言,例如:erlang。
Java的线程机制是抢占式的,这表示调度机制会周期性地中断线程,将上下文切换到另一个线程,从而为每个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动它的任务。(协作多线程)
线程的底层机制:切分CUP时间,但通常你不需要考虑它。
使用线程机制是一种建立透明的,可扩展的程序的方法。
Thread.yield()的调用是对线程调度器的一种建议,它表明“我已经执行完全生命周期中最重要的部分,此刻正是切换给其他任务执行一段时间的大好时机。
main()创建Thread对象时,每个Thread都”注册“了自己,它的任务退出其run()并死亡之前,垃圾回收器无法清除它。一个线程会创建一个单独的执行线程,在对start()的调用完成之后,它仍会继续存在。
使用Executor(java.util.concurrent包),用于管理Thread对象,为客户端和任务执行之间提供一个间接层,由Executor这个中介对象负责执行任务。允许你管理异步任务的执行。
ExecutorService(具有服务生命周期的Executor)知道如何构建恰当的上下文来执行Runnable对象。
ExecutorService service = Executors.newCachedThreadPool();//or newFixedThreadPool(5_
for(int i = 0; i < 5; i++){
service.execute(new LiftOff());
}
service.shutdown();
创建Executor的线程(这里是main线程)会继续运行,直至Executor的shutdown()方法调用后,这个线程(main)将在Executor中所有任务完成之后尽快退出。
在任何线程池中,现有线程在可能的情况下,都会被自动复用。
SingleThreadExecutor:对于想在另一个线程中连续运行的任何事物来说,是很有用的。例如监听进入的套接字连接的任务,或希望在线程中运行的短任务(如更新本地或远程日志的小任务)。
从任务中产生返回值:Callable接口。它的类型参数表示是从方法call()中返回值,并且必须使用ExecutorService.submit()方法调用它,示例:
public class CallableDemo {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
List<Future<String>> list = new ArrayList<Future<String>>();
for(int i =0; i < 5; i++){
list.add(service.submit(new TaskWithResult(i)));
}
for(Future<String> future : list){
try{
//get() blocks until completion:
System.out.println(future.get());
}catch(Exception e){
e.printStackTrace();
}finally{
service.shutdown();
}
}
}
}
class TaskWithResult implements Callable<String> {
private int id;
public TaskWithResult(int id) {
this.id = id;
}
@Override
public String call() throws Exception {
return "result of TaskWithResult " + id;
}
}
异常是不能跨线程传播回main(),必须在本地处理所有任务内部产生的异常。
优先级将该线程的重要性传递给了调度器。优先级较低的线程仅仅是执行的频率较低。试图通过设置优先级来调试线程运行顺序是不可靠的。
让步:yield(),让别的线程使用CPU。这只是一个暗示,没有任何机制保证它将会被采纳。
后台线程:指在程序运行的时候在后台提供一种通用服务的线程,并不属于程序中必要的部分。因此当非后台进程结束时,程序也会终止,同时会杀死进程中的所有后台线程。反过来,只要有非后台线程还在运行,程序就不会终止(如main是非后台线程)。
可以通过实现ThreadFactory来定制Executor创建的线程属性(后台,优先级,名称):
分享到:
相关推荐
Java编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZF
java并发编程实践笔记java并发编程实践笔记java并发编程实践笔记java并发编程实践笔记
Java并发编程学习笔记
java并发编程学习笔记,很详细的资料
7、并发工具类CountDownLatch 、CyclicBarrier和Semaphore底层实现原理 8、线程池原理和如何使用线程池 9、ThreadLocal 为什么会内存泄漏 10、Volatile底层实现原理 11、AQS源码分析 12、CAS原理分析和使用场景 13、...
Java并发编程学习笔记.
java并发编程pdf文档第二部分:Java并发编程实战.pdf、Java多线程编程核心技术.pdf、实战Java高并发程序设计.pdf
Java并发编程学习笔记,...目前,在JAVA并发编程方面的论述系统且内容详实的技术资料不太多,Java并发编程学习笔记是作者在实际工作中的经验总结,一般来说,当你读完了前8章,你已经足以可以应对JAVA的多线程编程了。
JAVA并发编程实践中文版 英文版 原书源码 带书签 java_concurrency_in_practice.pdf 英文版还是不错的,但是中文版的译者典型的没有技术功底,介绍上说什么专家, 翻译的非常差劲,有些句子都不通顺,都不知道自己去...
第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更灵敏的用户界面 1.3 线程带来的风险 1.3.1 安全性问题 1.3.2 活跃性...
绝对的好东西,亲测,认真读读绝对大有裨益,欢迎下载!
java并发编程实战源码 附有本书所有源码,maven 导入 eclipse或idea
读书笔记-Java并发编程实战-基础篇
Java并发编程与高并发解决方案-学习笔记-www.itmuch.com
java并发编程实战pdf学习笔记 总结了重要的知识点
java并发编程艺术java并发编程艺术java并发编程艺术java并发编程艺术java并发编程艺术
Java并发编程与高并发解决方案-学习笔记
JAVA并发编程艺术 高清pdf : 1.并发变成的挑战 2. java并发机制的底层实现原理 3. java 内存模型 4. java并发编程基础 5.java中的锁。。。。。。。
java并发编程笔记