Thinking in Java笔记之并发

发表于:2017-4-18 13:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:keep passion    来源:51Testing软件测试网采编

  Executor种类:
  · Executors.newCachedThreadPool() :每次都会创建一个新线程
  · Executors.newFixedThreadPool(n) :创建一个大小为n的线程池
  · Executors.newSingleThreadExecutor() :相当于创建一个大小为1的线程池,所有任务都在一个线程里执行。
  从任务中产生返回值:
  使用 Callable 接口,使用 ExecutorService.submit() 方法进行调用, submit() 方法会产生 Future 对象,它用 Callable 返回的结果的特定类型进行了参数化,并可以用 isDone() 方法来查询 Future 是否已经完成。当任务完成时,它具有一个结果,可以调用 get() 方法来获取该结果。
  后台线程:是指在程序运行的时候在后台提供一种通用服务的线程,并且这种线程并不属于程序中不可或缺的一部分。因此,当所有的费后台线程结束时,程序也就终止了,同时会杀死进程中的所有后台线程。
  在线程启动之前调用 setDaemon() 方法设置为后台线程
  Thread daemon = new Thread();
  daemon.setDaemon(true);
  daemon.start();
  可以通过调用 isDaemon() 方法来确定线程是否是一个后台线程。如果是一个后台线程,那么它创建的任何线程将被自动设置成后台线程。
  Join:
  一个线程可以在其他线程之上调用 join() 方法,其效果是等待一段时间直到第二个线程结束才继续执行。如果某个线程在另一个线程 t 上调用 t.join() ,此线程将被挂起,直到目标线程 t 结束才恢复。对 join() 方法的调用可以被中断,做法是在调用线程上调用 interrupt() 方法。
  Synchronized关键字:
  所有对象都自动含有单一的锁,当在对象上调用其任意synchronized方法的时候,此对象都被加锁,这时该对象上的其他synchronized方法只有等到前一个方法调用完毕并释放了锁之后才能被调用。对于某个特定对象来说,其所有的synchronized方法共享一个锁,这可以被用来防止多个任务同时访问被编码为对象内存。并且将域设置为private是非常重要的,否则synchronized关键字就不能防止其他任务直接访问域,这样就会产生冲突。
  一个对任务可以多次获得对象的锁,当首先获得了锁的任务才能允许继续获取多个锁,当锁计数为0的时候,锁被完全释放,此时别的任务就可以使用此资源。
  使用显式的Lock对象
private Lock lock = new ReentrantLock();
publicintnext(){
lock.lock();
try {
} finally {
lock.unlock();
}
}
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号