等待唤醒机制涉及方法:

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多线程(线程通信-等待换新机制-代码优化)的更多相关文章

  1. java多线程-线程通信

    线程通信的目标是使线程间能够互相发送信号.另一方面,线程通信使线程能够等待其他线程的信号. 通过共享对象通信 忙等待 wait(),notify()和 notifyAll() 丢失的信号 假唤醒 多线 ...

  2. java多线程——线程通信

    一.线程通信目标 1.线程通信的目标是使线程间能够互相发送信号 2.线程通信使线程能够等待其他线程的信号 二.几种方式 1.通过共享对象 2.忙等待 线程 B 运行在一个循环里,以等待信号 (不释放c ...

  3. java 多线程—— 线程等待与唤醒

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  4. Java多线程——线程之间的协作

    Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...

  5. Java多线程——线程八锁案例分析

    Java多线程——线程八锁案例分析 摘要:本文主要学习了多线程并发中的一些案例. 部分内容来自以下博客: https://blog.csdn.net/dyt443733328/article/deta ...

  6. java 多线程—— 线程让步

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  7. Java多线程--线程及相关的Java API

    Java多线程--线程及相关的Java API 线程与进程 进程是线程的容器,程序是指令.数据的组织形式,进程是程序的实体. 一个进程中可以容纳若干个线程,线程是轻量级的进程,是程序执行的最小单位.我 ...

  8. Java多线程——线程的优先级和生命周期

    Java多线程——线程的优先级和生命周期 摘要:本文主要介绍了线程的优先级以及线程有哪些生命周期. 部分内容来自以下博客: https://www.cnblogs.com/sunddenly/p/41 ...

  9. Java多线程——线程的创建方式

    Java多线程——线程的创建方式 摘要:本文主要学习了线程的创建方式,线程的常用属性和方法,以及线程的几个基本状态. 部分内容来自以下博客: https://www.cnblogs.com/dolph ...

随机推荐

  1. php删除数组中指定值的元素

    php删除数组中指定值的元素 /** * 删除数组中指定值的元素 * @author: ibrahim * @param array $arr 数组 * @param string $val 值 * ...

  2. js 合并对象

    对象的合并 需求:设有对象 o1 ,o2,需要得到对象 o3 var o1 = { a:'a' }, o2 = { b:'b' }; // 则 var o3 = { a:'a', b:'b' } 方法 ...

  3. Binary Tree Maximum Path Sum 自底向上求解(重重重重)

    题目: 链接 解答: 自底向上求解.left_max right_max分别返回了左右子树的最大路径和,假设左右子树最大路径和小于0.那么返回零. 用这个最大路径和和根节点的值相加.来更新最大值,同一 ...

  4. 跨域CORS原理及调用详细演示样例

      上篇博客介绍了JSONP原理,其不足,就是仅仅能使用GET提交.若传输的数据量大.这个JSONP方式就歇菜了.那这篇博客就来介绍还有一种跨域介绍方案-CORS.   相对JSONP,CORS支持P ...

  5. 图像处理之基础---滤波器之高斯低通滤波器3c代码实现yuv,rgb

    ()高斯理论简介 () ()代码实现 四 使用高斯滤波器进行图像的平滑 ()高斯简介 http://research.microsoft.com/en-us/um/people/kahe/eccv10 ...

  6. [计算机故障]笔记本无法启动,开机启动出现“Operating System Not Found”无法进系统

    背景介绍:同事的一台索尼的笔记本,安装XP.开机启动出现“Operating System Not Found”无法进系统 诊断: 初步判断硬盘故障.但听声音,没有异响. 开机按F2进入BIOS设置. ...

  7. Proxy authentication confirmation prompt keeps popping up although the user/password is saved 火狐浏览器一直提示输入代理的账号和密码

    https://support.mozilla.org/zh-CN/questions/943488 signon.autologin.proxy;true network.proxy.share_p ...

  8. ModuleNotFoundError: No module named 'cStringIO'

    这是2.x转3.x问题: 2.x写法: import cStringIO 3.x写法: from io import StringIO 问题解决.

  9. POJ2187 Beauty Contest (旋转卡壳算法 求直径)

    POJ2187 旋转卡壳算法如图 证明:对于直径AB 必然有某一时刻 A和B同时被卡住 所以旋转卡壳卡住的点集中必然存在直径 而卡壳过程显然是O(n)的 故可在O(n)时间内求出直径 凸包具有良好的性 ...

  10. xargs 主要用于不支持管道的shell命令*****

    变量置换,主要用于不支持管道的shell命令,如:rm.sed等,但有些命令需要占位符“{}”需要注意.比如:删除文件- ls|xargs -i rm -rf {} 文件改名-   ls|xargs ...