java多线程编程核心技术(三)--线程间通信
1、等待/通知机制
1、wait()方法:使当前执行代码的线程进行等待。wait()方法是Object类的方法,该方法将当前线程放入“预执行队列”中,并在wait()所处的代码行处停止执行。只到被唤起或被中断。
在调用wait()之前,线程必须获取该对象的锁,所以该方法只能在同步方法或同步代码块中执行,执行wait()之后,当前线程会释放锁。
2、notify()方法:该方法的作用是用来唤起等待该对象锁的其它线程,如果有多个线程等待,则由线程规划器随机唤起一个wait()状态的线程,该方法也只能在同步方法或同步代码块中执行。
在执行notify()之后,当前线程不会马上释放锁。要等到执行notify()方法的线程将程序执行完,也就是退出synchronized代码块后,才会释放锁。
3、interrupt():中断线程。当线程是wait状态时,调用interrupt()会出现InterruptedExceptiom异常。
4、notifyAll(): 唤醒其它所有等待的线程。
5、wait(long):等待在一段时间内是否有线程对锁唤醒,如果到时间则自动唤醒。
6、在多生产者多消费者模式中,使用notify(),有可能会因为连续唤起同类而造成程序假死。可以使用notifyAll()将所有等待线程唤起来解决。
8、java提供了四个类来让线程间通信,分别是 PipedInputStream、PipedOutputStream、PipedReader、PipedWriter。
2、join()的使用
1、thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。join()底层通过wait()方法实现,
当main线程调用t.join时候,main线程会获得线程对象t的锁,然后main线程进入wait状态,只到t线程执行完,或者唤起main线程
2、join(long):设定等待时间。
3、ThreadLocal的使用
1、ThreadLocal解决的是变量在不同线程间的隔离性。不同的线程拥有自己的值。
2、继承Threadlocal并重写initialValue(),可以使ThreadLocal具有初始值。
4、InheritableThreadLocal的使用
1、InheritableThreadLocal可以在子线程中获取父线程继承下来的值。
java多线程编程核心技术(三)--线程间通信的更多相关文章
- Java多线程编程核心技术(三)多线程通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
- Java并发编程(04):线程间通信,等待/通知机制
本文源码:GitHub·点这里 || GitEE·点这里 一.概念简介 1.线程通信 在操作系统中,线程是个独立的个体,但是在线程执行过程中,如果处理同一个业务逻辑,可能会产生资源争抢,导致并发问题, ...
- Java多线程(十)线程间通信 join
若果主线程想等待子线程执行完成之后再结束,可以用join方法 join 和sleep区别 join内部有wait实现,所以当执行join方法后,当前线程的锁被释放,那么其他线程就可以调用此线程的同步方 ...
- Java多线程编程核心技术(二)对象及变量的并发访问
本文主要介绍Java多线程中的同步,也就是如何在Java语言中写出线程安全的程序,如何在Java语言中解决非线程安全的相关问题.阅读本文应该着重掌握如下技术点: synchronized对象监视器为O ...
- Java多线程编程核心技术(一)Java多线程技能
1.进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程. 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位. 举个例子: 打开你的计算机上的任务管 ...
- 《java多线程编程核心技术》不使用等待通知机制 实现线程间通信的 疑问分析
不使用等待通知机制 实现线程间通信的 疑问分析 2018年04月03日 17:15:08 ayf 阅读数:33 编辑 <java多线程编程核心技术>一书第三章开头,有如下案例: ...
- Java多线程编程核心技术
Java多线程编程核心技术 这本书有利于对Java多线程API的理解,但不容易从中总结规律. JDK文档 1. Thread类 部分源码: public class Thread implements ...
- 《Java多线程编程核心技术》知识梳理
<Java多线程编程核心技术> @author ergwang https://www.cnblogs.com/ergwang/ 文章末尾附pdf和png下载链接 第1章 Java多线程技 ...
- 《Java 多线程编程核心技术》- 笔记
作为业务开发人员,能够在工作中用到的技术其实不多.虽然平时老是说什么,多线程,并发,注入,攻击!但是在实际工作中,这些东西不见得用得上.因为,我们用的框架已经把这些事做掉了. 比如web开发,外面有大 ...
- Java多线程编程核心技术---学习分享
继承Thread类实现多线程 public class MyThread extends Thread { @Override public void run() { super.run(); Sys ...
随机推荐
- RabbitMQ二:AMQP协议
参考这个:http://kb.cnblogs.com/page/73759/ 参考这个:http://www.cnblogs.com/charlesblc/p/6286875.html 写的挺好 Ra ...
- python加载不了cookirlib模块的问题
Python 3 改成 http.cookiejar了,所以import cookielib只要改成import http.cookiejar,就可以了.
- C语言中结构体大小计算
1.普通结构体 struct student { char sex; char a; char b; int age; char name[100]; }; 该结构体大小为108 解答:1.先算str ...
- POJ_1163_The triangle
The Triangle Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 40079 Accepted: 24144 De ...
- IMDB电影排行爬取分析
一.打开IMDB电影T250排行可以看见250条电影数据,电影名,评分等数据都可以看见 按F12进入开发者模式,找到这些数据对应的HTML网页结构,如下所示 可以看见里面有链接,点击链接可以进入电影详 ...
- 04JavaScript程序语句
JavaScript程序语句 2.6程序控制流程 2.6.1选择结构 if <逻辑表达式> 语句 else 语句 if <逻辑表达式> { 语句组 } else { 语句组} ...
- 06Oracle Database 数据类型
Oracle Database 数据类型 字符型 char(n)最大2000个字节 定长 nchar(n)最大2000个字节 变长 varchar2(n) 最大4000个字节 变长 nvarchar2 ...
- 第四次作业——项目Alpha测试
这个作业属于哪个课程 <课程链接> 这个作业要求在哪里 <作业要求> 团队名称 飞猪们 这个作业的目标 发布项目α版本,对项目进行用例测试,以及项目情况总结 一.团队成员学号列 ...
- 网络编程 - join及守护线程
一.Join实例(join理解为等待)import threading,timedef run(n): time.sleep(3) print ("task",n)start = ...
- 反片语(Ananagrams,Uva 156)
输入一些单词,找出所有满足如下条件的单词:该单词不能通过字母重排,得到输入文 本中的另外一个单词.在判断是否满足条件时,字母不分大小写,但在输出时应保留输入中 的大小写,按字典序进行排列(所有大写字母 ...