创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,就提供了Callab ...
分类:
编程语言 时间:
2020-01-28 21:20:15
阅读次数:
76
1、为什么要线程通信 多个线程并发执行时,在默认情况下CPU是随机切换线程的,有时我们希望CPU按照我们的规律执行线程,此时就需要线程之间协调通信。 2、线程通讯方式 线程间通信常用方式如下: l 休眠唤醒方式:Object的wait、notify、notifyAll 和 Condition的awa ...
分类:
编程语言 时间:
2020-01-21 17:47:08
阅读次数:
85
线程通信的例子:使用两个线程打印 1-100,线程1、线程2交替打印。涉及到的三个方法:wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器。notify():一旦执行此方法,就会唤醒被wait的一个线程。如果有多个线程被wait,就唤醒优先级高的那个。notifyAll():一旦 ...
分类:
编程语言 时间:
2020-01-17 00:02:45
阅读次数:
86
class MyResource { private volatile boolean FLAG = true; //默认开启,进行生产+消费 private AtomicInteger atomicInteger = new AtomicInteger(); BlockingQueue<Strin ...
分类:
编程语言 时间:
2020-01-06 00:36:19
阅读次数:
108
package communication; /* 使用两个线程1,2交替打印1-100 线程通信方法: 1.wait():一旦执行此方法,当前线程进入阻塞态,并释放锁 2.notify():会唤醒被wait的一个线程,如果有多个线程wait,则唤醒优先级高的 3.notifyAll():唤醒所有被 ...
分类:
编程语言 时间:
2020-01-05 18:36:13
阅读次数:
94
/** * 现在两个线程,可以操作初始值为零的一个变量,实现一个线程对该变量加1,一个线程对该变量减1,交替,来10轮。 * 1 多线程编程工程化模板-上 * 1.1 线程 操作 资源类 * 1.2 高内聚 低耦合 * * 2 多线程编程工程化模板-下 * 2.1 判断 * 2.2 干活 * 2.3 ...
分类:
编程语言 时间:
2019-12-27 09:30:55
阅读次数:
84
分析线程经典案例生产者消费者 运行结果: 结果分析: 那么怎么再判断flag呢?while 代码如下: 结果出现死锁: 结果分析: 通过分析,那能不能每次唤醒只唤醒对方线程(如生产者线程只唤醒消费者线程,消费者线程只唤醒生产者线程),查看Object对象方法中没有,但是有一个notifyAll()方 ...
分类:
编程语言 时间:
2019-12-23 13:43:16
阅读次数:
93
线程间通信 概念:多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相同。比如:线程A用来生成包子的,线程B用来吃包子的,包子可以理解为同一资源,线程A与线程B处理的动作,一个是生产,一个是消费,那么线程A与线程B之间就存在线程通信问题。 为什么要处理线程间通信: 多个线程并发执行时, 在默 ...
分类:
编程语言 时间:
2019-12-17 13:10:14
阅读次数:
103
wait()与notify() 首先考虑下面的情景,一个线程必须要等另外一个线程执行完才能继续执行,可以设置一个变量,第二个线程一直监控它,当第一个线程执行完后修改这个变量的值,第二个线程监控到值发生了改变然后继续执行,如下代码 上面的方式通过while循环去阻塞,会非常的耗费资源,那么有没有更简单 ...
分类:
编程语言 时间:
2019-12-15 21:43:49
阅读次数:
78
同步工具类的使用大大方便了多线程并发的操作。CountDownLatch 是一个 java.util.concurrent下的同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。这种需求如果使用基本的线程通信来操作的确过于繁琐。使用CountDownLatch工具类大大提高了这类问 ...
分类:
其他好文 时间:
2019-12-11 11:18:47
阅读次数:
67