Java编程思想 第21章并发 学习笔记
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java编程思想 第21章并发 学习笔记,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2734字,纯文字阅读大概需要4分钟。
内容图文
![Java编程思想 第21章并发 学习笔记](/upload/InfoBanner/zyjiaocheng/606/46595f2b5356498382f76334ac08476e.jpg)
- Java的线程机制是抢占式的,这表示调度机制会周期性地中断线程,将上下文切换到另一个线程,从而为每一个线程都提供时间片,使得每个线程都会分配到数量合理的时间去驱动它的任务。
- 线程使你能够创建更加松散耦合的设计。无需显式地关注通常可以由线程来处理的任务。
- 通过使用多线程机制,这些独立任务 (也被称为子任务)中的每一个都将由执行线程来驱动。
- 定义任务:只需实现Runnable接口并编写run()方法,使得该任务可以执行你的命令。但它不会产生任何内在的线程能力,要实现线程行为,你必须显式地将一个任务附着在线程上。
class RunnableImpl implements Runnable { public RunnableImpl() { System.out.println(Thread.currentThread().getName()+" constructed!"); // 任务在main线程被构造 } @Override public void run() { for (int i = 0; i < 3; i++) { System.out.println(Thread.currentThread().getName() + " " + i); // 在新的执行线程上执行该子任务 Thread.yield(); } } }
- Thread类:将Runnable对象转变为工作任务的传统方式是把它提交给一个Thread构造器。实际上,Thread内部有一个Runnable对象,但如果构造器中传入Runnable对象之后,会替换成该Runnable对象。
调用Thread对象的start()方法为该线程执行必须的初始化操作,然后调用Runnable的run方法,以便在这个新线程中启动该任务。public class test{ public static void main(String[] args) { for (int i = 0; i < 5; i++) { new Thread(new RunnableImpl()).start(); } } }
每个Thread都注册了它自己,因此确实有一个对它的引用,而且在它的任务退出其run()并死亡之前,垃圾回收器无法清除它。因此,一个线程会创建一个单独的执行线程,在对start()的调用完成之后,它仍旧会继续存在。 - 使用Executor:Executor(执行器)将会为你管理Thread对象,从而简化了并发编程。
ExecutorService
是具有服务生命周期的Executor
,知道如何构建恰当的上下文来执行Runnable对象。
shutdown()
方法的调用可以防止新任务被提交到这个Executor,当前线程将会继续运行在shutdown()
方法调用之前提交的所有任务。
有了ExecutorService exec = Executors.newCachedThreadPool(); // 获取线程池 for (int i = 0; i < 5; i++) { exec.execute(new RunnableTask()); // 将Runnable任务放进线程池中,让线程池来执行任务 } exec.shutdown();
FixedTreadPool
可以一次性预先执行代价高昂的线程分配,因此也就可以限制线程的数量了。这可以节省时间,因为不用为每个任务都固定地赋初创建线程的开销。
当线程用完之后,接下来的任务会等待其他任务结束之后,再开始执行。ExecutorService exec = Executors.newFixedThreadPool(3); // 有限线程集去执行任务 for (int i = 0; i < 5; i++) { exec.execute(new RunnableTask()); } exec.shutdown();
SingleThreadExecutor
就像是线程数量为1的FixedTreadPool
。对于你希望在另一个线程中连续运行的任何事物来说,都是很有用的。比如,监听进入的套接字连接任务,更新本地或远程日志的小任务,或者是事件分发线程。
可以用ExecutorService exec = Executors.newSingleThreadExecutor(); for (int i = 0; i < 5; i++) { exec.execute(new RunnableTask()); } exec.shutdown();
SingleThreadExecutor
来执行多个线程对同一个文件系统的操作,实现任意时刻都只有唯一的任务在运行。
内容总结
以上是互联网集市为您收集整理的Java编程思想 第21章并发 学习笔记全部内容,希望文章能够帮你解决Java编程思想 第21章并发 学习笔记所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。