![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java多线程
哈哈哈哈哈哈哈111
这个作者很懒,什么都没留下…
展开
-
中断线程(java并发编程第7章)
启动线程之后, 大多数时候我们等待线程运行完成后自动结束. 但是有时我们希望可以提前终止线程的运行:1. 用户申请取消时. 比如用户点击了取消按钮.2. 时间限制的任务. 有些任务具有时间限制, 如果在一定的时间内仍然没有得到想要的结果, 我们可能希望终止该任务的运行.3. 发生特定的事件时. 比如多个线程同时在不同的位置搜索某一文件, 当其中一个线程搜索到了想要的文件,转载 2017-02-16 15:31:17 · 308 阅读 · 0 评论 -
闭锁之future(java并发编程实战5.5.2)
1、FutureTask计算通过Callable实现,等价于一个可携带结果的Runnable,并有3个状态:等待、运行和完成。完成包括所有计算以任意的方式结束,包括正常结束、取消和异常。2、一旦FutureTask进入完成状态,会永远停止在这个状态。3、Future.get的行为依赖于任务的状态。如果已经完成,get得到返回结果。否则被阻塞直到任务转入完成状态,然后返回结果或抛出异常。原创 2017-02-10 14:31:20 · 342 阅读 · 0 评论 -
栅栏(java并发编程实战5.5.4)
栅栏类似于闭锁,它能阻塞一组线程直到某个事件发生。栅栏与闭锁的关键区别在于,所有线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程,且能够重复执行。import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public clas原创 2017-02-10 15:42:49 · 1376 阅读 · 0 评论 -
信号量(java并发编程实战5.5.4)
用途:用来控制同时访问某个特定资源的操作数量,或者同时执行某个指定操作的数量。计数信号量可以用来实现某种资源池,或者对容器施加边界。 public class SemaphoreTest { private final Set set; private final Semaphore sema; public SemaphoreTest(int bound){ t转载 2017-02-10 16:25:37 · 289 阅读 · 0 评论 -
设计高效的线程安全的缓存(java并发编程实战5.6)
几乎每一个应用都会使用到缓存, 但是设计高效的线程安全的缓存并不简单. 如:Java代码 public interface Computable { V compute(A arg) throws InterruptedException; } public class ExpensiveFunction转载 2017-02-10 16:58:49 · 2923 阅读 · 0 评论 -
一个线程通信问题(sub运行10次,然后main运行100次,这样交替循环50次)
/** * sub运行10次,然后main运行100次,这样交替循环50次 * @author Administrator * */ public class TraditionalThreadCommunication { /** * @param args */ public static void原创 2017-02-10 17:46:00 · 533 阅读 · 0 评论 -
java线程池介绍(java并发编程实战第6章)
为什么需要使用线程池? one-thread-per-request可能带来的问题:1. 线程的创建和销毁会占用一定的资源. 如果请求频繁而对请求的处理是轻量级的(大多的web请求符合该情形), 创建一个线程处理请求后将其销毁的方式是不划算的.2. 过多的线程导致线程切换频繁, 用于处理请求的CPU时间反而会减少. 如果当前的线程数已经让CPU处于忙碌状态, 那么增加更多的线程不会原创 2017-02-10 18:03:57 · 297 阅读 · 0 评论 -
使用CompletionService批处理任务(java并发编程第6章)
如果你向Executor提交了一个批处理任务,并且希望在它们完成后获得结果。为此你可以保存与每个任务相关联的Future,然后不断地调用timeout为零的get,来检验Future是否完成。这样做固然可以,但却相当乏味。幸运的是,还有一个更好的方法:完成服务(Completion service)。CompletionService整合了Executor和BlockingQueue的功能。你转载 2017-02-15 09:49:00 · 329 阅读 · 0 评论 -
Java正确处理InterruptedException的方法(java并发编程第7章)
要想讨论正确处理InterrupedtException的方法,就要知道InterruptedException是什么。根据Java Doc的定义Thrown when a thread is waiting, sleeping, or otherwise occupied, and the thread is interrupted, either before or durin原创 2017-02-15 16:39:51 · 3594 阅读 · 1 评论 -
闭锁之CountDownLatch(java并发编程实战5.5.1)
1、类介绍闭锁(Latch)是一种同步工具类,可以延迟线程的进度直到其到达终止状态。闭锁的作用相当于一扇门:在闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当到达结束状态时,这扇门会打开并允许所有的线程通过。当闭锁到达结束状态后,将不会再改变状态,因此这扇门将永远保持打开状态。闭锁可以用来确保某些活动直到其他活动都完成后才继续执行,例如:原创 2017-02-10 11:35:26 · 322 阅读 · 0 评论 -
线程安全的集合类(java并发编程第5章)
synchronized集合java集合框架提供了多种synchronized集合, 比如Vector, HashTable, Collections的synchronizedXxx方法的返回值等.synchronized集合是线程安全的, 但不是严格线程安全的. 根据JCIP第二章关于线程安全的定义--线程安全的类无需调用方进行额外的同步--synchronized集合是不满足该转载 2017-02-10 10:49:10 · 336 阅读 · 0 评论 -
使用BlockingQueue构建生产者消费者模式(java并发编程5.3)
生产者消费者模式以缓冲区作为生产者和消费者之间沟通的桥梁: 生产者只负责生产, 将生产出来的数据存入缓冲区. 而消费者只负责消费, 不断的从缓冲区中取出数据进行处理.生产者消费者模式是非常常用的, 因为应用该模式有效的解耦了生产者和消费者. 生产者不需要知道有没有其他生产者在生产, 也不需要知道有多少个消费者在消费, 而消费者不需要知道数据来自哪个生产者. 另外该模式支持并发操作,转载 2017-02-10 10:43:41 · 405 阅读 · 0 评论 -
配置ThreadPoolExecutor(java并发编程第8章)
Executors的静态方法newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool所返回的线程池都是ThreadPoolExecutor对象或者其子类对象. ThreadPoolExecutor提供了多种配置, 可以根据实际定制合适的线程池. 线程的创建和销毁ThreadPoolExecutor构造函数转载 2017-02-17 10:02:28 · 887 阅读 · 0 评论 -
内置锁和显式锁的区别(java并发编程第13章)
任何java对象都可以用作同步的锁, 为了便于区分, 将其称为内置锁.JDK5.0引入了显式锁: Lock及其子类(如ReentrantLock, ReadWriteLock等). 内置锁和显式锁的区别有: 1. 可中断申请如果使用synchronized申请一个内置锁时锁被其他线程持有, 那么当前线程将被挂起, 等待锁重新可用, 而且等待期间无法中断. 而转载 2017-02-17 16:06:03 · 1583 阅读 · 0 评论 -
利用对象限制和委托构建线程安全的类(java并发编程实战第四章内容)
设计线程安全的类需要考虑:1. 确定组成对象状态的变量.2. 确定约束对象状态的不变式.3. 建立并发访问对象状态的规则. 后置条件: 由于某些变量的取值是有限制范围的, 改变状态变量之后需要检查改变后的状态是否合法. 后置条件要求进行额外的同步. 比如一个计数器, 当前的值为17, 那么进行一次操作之后其取值只能是18, 其他值都是非法的.前置条件转载 2017-02-09 14:47:22 · 434 阅读 · 0 评论 -
线程的六种状态及线程状态的判断和改变
线程有六种状态:new(新创建),runnable(可运行),blocked(被阻塞),waiting(等待),timed waiting(计时等待),terminated(被终止)几种方法的比较:void interrupt()向线程发送中断请求。线程的中断状态将被置为true。如果目前该线程被一个sleep方法调用阻塞,那么将抛出InterrupterException.s转载 2015-11-09 17:21:37 · 4462 阅读 · 0 评论 -
Java 并发工具包 java.util.concurrent 用户指南
译序本指南根据 Jakob Jenkov 最新博客翻译,请随时关注博客更新:http://tutorials.jenkov.com/java-util-concurrent/index.html。本指南已做成中英文对照阅读版的 pdf 文档,有兴趣的朋友可以去 Java并发工具包java.util.concurrent用户指南中英文对照阅读版.pdf[带书签] 进行下载。转载 2015-10-29 14:47:28 · 2107 阅读 · 0 评论 -
设计线程监控代码结构
线程监控:/** * 线程状态的监控 * @author dell * */public class Test5 extends RunnableWrapper { @Override public void handler() { System.out.println("xxxxxx"); } public static void main(String[] arg转载 2015-10-29 14:19:04 · 1939 阅读 · 0 评论 -
多线程卖票,死锁问题和生产者消费者问题!
1.生产者消费者问题模拟:public class Test2 { public static void main(String[] args) { Num num = new Num(0); Test2 lock = new Test2(); ConsumerTask ct = new ConsumerTask(num, lock); Consumer c1 = new原创 2015-10-29 13:05:36 · 2028 阅读 · 1 评论 -
fork/join框架简介
1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+转载 2015-10-28 17:14:14 · 1588 阅读 · 0 评论 -
Race condition【竟态条件】(java并发编程实战第二章)
多线程环境下,无需调用方进行任何同步处理也能保证正确性的类是线程安全的类 无状态的对象是线程安全的。无状态是指没有成员变量。由于方法的局部变量都是在线程私有的栈中分配的,因此在一个线程中调用无状态对象的方法,不会影响到其他线程。 race condition: 正确性依赖于事件发生的相对时间。check-and-act是race condition中的一种,转载 2017-02-09 15:36:58 · 1636 阅读 · 0 评论 -
处理不可中断的阻塞(java并发编程第7章)
并不是所有的阻塞都是可中断的, 比如InputStream.read方法. 在检测到输入数据可用, 到达流末尾或者抛出异常前, 该方法一直阻塞. 而且阻塞的时候不会检查中断标记, 所以中断线程无法使read从阻塞状态返回. 但是关闭流可以使得read方法抛出异常, 从而从阻塞状态返回. Java代码 public class ReaderThread extends转载 2017-02-15 19:15:04 · 1908 阅读 · 0 评论