java多线程(线程通信-等待换新机制-代码优化)
等待唤醒机制涉及方法:
wait():让线程处于冻结状态,被wait的线程会被存储到线程池中。
noticfy():唤醒同一个线程池中一个线程(任意也可能是当前wait的线程)
notifyAll():唤醒同一个线程池中所有的线程。
这些方法必须定义在同步中,因为这个方法是用于操作线程状态的方法,必须要明确到地操作的是哪个锁上的线程。
为什么操作线程的方法wait,notify,notifyAll定义在object类中。
因为这些方法是监视器(锁)方法,监视器是锁。
锁是任意对象,任意对象调用的方法就在Object类中。
class Resource{
private String name;
private String sex;
private boolean flag = false;
public synchronized void set(String name ,String sex){
if(flag){
try{wait();}catch(Exception e){}
}
notify();
this.name = name;
this.sex = sex;
System.out.println(this.name+"**input*"+this.sex);
flag = true;
}
public synchronized void out(){
if(!flag){
try{wait();}catch(Exception e){}
}
notify();
System.out.println(this.name+"**output*"+this.sex);
flag = false;
}
}
class Input implements Runnable {
Resource s ;
Input(Resource t){
this.s = t;
}
int i = 0;
public void run (){
while(true){
if(i ==0){
s.set("mike","man");
}else{
s.set("xixi","women");
}
i= (i+1) % 2;
}
}
}
class Output implements Runnable{
Resource s;
Output(Resource t){
this.s = t;
}
public void run(){
while(true){
s.out();
}
}
}
class ResourceDemo{
public static void main(String[] arg){
Resource s = new Resource();
Input p = new Input(s);
Output o = new Output(s);
Thread t1 = new Thread(p);
Thread t2 = new Thread(o);
t1.start();
t2.start();
}
}
java多线程(线程通信-等待换新机制-代码优化)的更多相关文章
- java多线程-线程通信
线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线 ...
- java多线程——线程通信
一.线程通信目标 1.线程通信的目标是使线程间能够互相发送信号 2.线程通信使线程能够等待其他线程的信号 二.几种方式 1.通过共享对象 2.忙等待 线程 B 运行在一个循环里,以等待信号 (不释放c ...
- java 多线程—— 线程等待与唤醒
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Java多线程——线程之间的协作
Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...
- Java多线程——线程八锁案例分析
Java多线程——线程八锁案例分析 摘要:本文主要学习了多线程并发中的一些案例. 部分内容来自以下博客: https://blog.csdn.net/dyt443733328/article/deta ...
- java 多线程—— 线程让步
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Java多线程--线程及相关的Java API
Java多线程--线程及相关的Java API 线程与进程 进程是线程的容器,程序是指令.数据的组织形式,进程是程序的实体. 一个进程中可以容纳若干个线程,线程是轻量级的进程,是程序执行的最小单位.我 ...
- Java多线程——线程的优先级和生命周期
Java多线程——线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...
- Java多线程——线程的创建方式
Java多线程——线程的创建方式 摘要:本文主要学习了线程的创建方式,线程的常用属性和方法,以及线程的几个基本状态. 部分内容来自以下博客: https://www.cnblogs.com/dolph ...
随机推荐
- C/C++综合測试题(四)
又刷了一套题 这些题都是百度.阿里巴巴.腾讯.网易.新浪等公司的面试原题.有一定的难度.只是确实相当有水平.能够通过做题来查漏补缺. 11.以下代码的输出是什么? class A { public: ...
- [Erlang危机](5.1.4)端口port
原创文章,转载请注明出处:server非业余研究http://blog.csdn.net/erlib 作者Sunface 或port drivers15. 全程跟踪端口数会对诊断负载或进程泄漏 ...
- FFmpeg解码视频帧为jpg图片保存到本地
FFmpeg解码视频帧为jpg图片保存到本地 - CSDN博客 https://blog.csdn.net/qq_28284547/article/details/78151635
- luogu3942将军令
https://www.zybuluo.com/ysner/note/1302132 题面 在大小为\(n\)的树上选择尽量少的点,使得所有未选择的点距离选择了的点小于等于\(k\). \(n\leq ...
- 7. ExtJS.form中msgTarget
转自:https://www.cnblogs.com/guafuli/articles/msgtarget_values.html Ext表单提示方式:msgTarget:有4中方式:qtip,tit ...
- IDEA中项目src目录下无法创建java文件的问题
出现的问题如下,是因为该目录不是源码目录 解决办法 设置成功
- IntelliJ IDEA Tomcat配置
解决方法: 下载地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/native
- J20170527-ts
足場 立脚点.脚手架 scaffold ハイパーリンク 超链接 hyperlink アンカータグ 锚标签 でしゃばり 多嘴.多事.多管闲事的人,好出风头的人 でしゃばる 多管闲事 節介 ...
- TestNG设置用例循环执行
曾经做过一需求,需要单个集成测试用例循环执行N次,或许你会说for循环就可以了,这当然是可以的.那有没有逼格更高点的方法,当然也是有的.下面我们就说下使用TestNG注解功能实现用例的循环执行. 1. ...
- spring的annotation
spring容器创建bean对象的方式: 1,使用反射调用无参构造器来创建实例(前提是这个类有无参构造器)(常规方式) 2,通过工厂类获得实例(工厂类实现了接口FactoryBean<?> ...