
多线程
文章平均质量分 81
御前两把刀刀
一个善于总结的,一个喜欢书法的全栈程序员
展开
-
java线程同步与互斥
同步:用关键字synchronized给针对共享资源的操作(方法或代码块)加锁,这把锁就叫作互斥锁。所以有两种加锁方式,一种是同步方法,一种是同步代码块。如图:特别提示:锁住的不是方法,也不是代码块,而是对象,并且是同一个对象。也就是说一个线程正在调用该对象的同步方法,如果还没有执行完成,那么另一个线程就无法调用该对象的所有同步方法或代码块(会阻塞),当然没有加synchronized原创 2017-09-13 00:55:06 · 1332 阅读 · 0 评论 -
Lock&Condition实现线程同步通信
JDK5.0之后提供了两个接口Lock和Condition,简化同步和锁编程java.util.concurrent.locks.Lock ----取代synchronizedjava.util.concurrent.locks.Condition ------取代waite和notify优势:(1) Lock比传统线程模型中的synchronized方式更加面向原创 2017-09-20 00:20:05 · 410 阅读 · 0 评论 -
java线程池之java自带的四种线程池
使用ThreadPoolExecutor创建线程池比较麻烦,对于很多人来说不易使用,所以java已经帮我们设计好了四种线程池。查看java源代码发现这四种线程池仍然是由ThreadPoolExecutor创建的,只不过把相关的参数已经设计好了而已。案例一:同时演示三种线程池/* * 任务类 */class MyTask implements Runnable { String th原创 2017-09-19 22:27:03 · 1038 阅读 · 1 评论 -
java线程池之ThreadPoolExecutor(二):任务入队列和任务丢弃
除了前面描述涉及到的四个属性和ThreadFactory之外,还有两个分别是workQueue和handler,分别是BlockingQueue和RejectedExecutionHandler类型。BlockingQueue只是一个接口,它所表达的是当队列为空或者已满的时候,需要阻塞以等待生产者/消费者协同操作并唤醒线程。其有很多不同的具体实现类,各有特点。有的可以规定队列的长度,也有一些则原创 2017-09-18 10:56:17 · 9130 阅读 · 0 评论 -
java线程池之ThreadPoolExecutor(三):提交任务并得到任务执行结果
1.Callable接口ThreadPoolExecutor不仅可以执行Runnable的实现类,还可以执行Callable接口的实现类。Callable的接口和Runnable接口的区别是:Callable有一个call方法能够得到任务执行结果,而Runnable的run方法无法得到返回结果。Callable的接口的定义如下:public interface Callable {原创 2017-09-19 00:01:41 · 13284 阅读 · 0 评论 -
java线程池之ThreadPoolExecutor(一)
一 引言: 在前面的几篇博客中,我们知道,当需要使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以原创 2017-09-18 01:10:08 · 1032 阅读 · 2 评论 -
java多线程之死锁
概念:当所有的线程都在等待得到某个资源后才能继续运行下去时,整个程序将被挂起,这种情况叫做死锁。死锁的原因:互相等待,就是你等我来我等你。或者理解为互不相让。如图所示:注:note代表本子,pen代表笔。这张图的意思是:线程1需要线程2的笔才能写字,线程2需要线程1的本子才能写字,但是它们互不相让,互相等待,就会死锁。在java中,同步代码块的嵌套是最容易发生死锁的。示原创 2017-09-15 00:31:32 · 350 阅读 · 0 评论 -
同步与互斥经典案例——模拟火车票售票系统
案例描述:模拟火车站多个售票窗口同时售票(总共20张票,5个窗口同时卖票)案例代码如下:/** * 售票类--票的唯一来源 * @author Administrator */class TicketSys { private int totalTickets = 20; // 总票数 private int saledTickets = 0; // 已经售票数目 // 添原创 2017-09-15 00:00:18 · 1816 阅读 · 1 评论 -
java生产者消费者模型(线程协作)
生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法是让生产者此时进行休眠,等待消费者从缓冲区中取走了一个或者多个数据后再去唤醒它。原创 2017-09-13 22:17:23 · 477 阅读 · 0 评论 -
java多线程简介及线程创建方式
一 java多线程简介 程序是为了完成特定任务、用某种语言编写的一组指令的集合。 进程是程序的一次执行过程,是系统进行调度和资源分配的一个独立单位。 线程是比进程更小一级的执行单元,线程不能独立存在,必须存在于进程中,各线程间共享进程空间的数据。 在一个程序里面可以只运行一个线程,也可以创建多个线程运行。如图所示:原创 2017-09-12 23:04:14 · 479 阅读 · 0 评论