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 ...
随机推荐
- 最简单 NDK 样例
以下在 Ubuntu下 编译一个 c 语言 hello world 并在 android 手机或模拟器上执行 进入程序位置 cd ~/pnp5/jni 有三个文件 main.c Android.mk ...
- 网络安全-安全散列函数,信息摘要SHA-1,MD5原理
-----------------------------------------------欢迎查看网络安全连载博客-----------------------------------[网络安全] ...
- JSON-JSON字符串转换成JSON对象、JSON对象数组、java实体类以及保存到List列表中
处理JSON字符串时,一直出错,写个样例后发现原来是没有弄清楚数据的格式问题. 实现的是 JSONString 转换成java对象 或是 list列表 实例类 News package lyx.ent ...
- PH_Pooled Featrues Classification MIREX 2011 Submission
Abstract Principal Mel-Spectrum Components (Feature) Temporal Pooling Functions (Model) Single Hidde ...
- iOS tableview cell 的展开收缩
iOS tableview cell 的展开收缩 #import "ViewController.h" @interface ViewController ()<UITabl ...
- poj 2186(tarjan+缩点)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 37083 Accepted: 15104 De ...
- [Codeforces 623A] Graph and String
[题目链接] http://codeforces.com/contest/623/problem/A [算法] 首先 , 所有与其他节点都有连边的节点需标号为'b' 然后 , 我们任选一个节点 , 将 ...
- python time 时间模块
time():获取当前系统的时间戳ctime():以人类可读的方式打印当前系统时间sleep():接受一个参数,表示休眠时间 #!/usr/bin/env python #coding:utf8 im ...
- 698C
Description n个视频,长度为k的缓存,每次询问,每个视频以pi的概率被选,如果不在缓存区则加入,如果缓存区满了,则最先进缓存的出来,问10^100次操作以后每个视频在缓存的概率 Input ...
- E20171102-E
segment n. 环节; 部分,段落; [计算机] (字符等的) 分段; [动物学] 节片; distinct adj. 明显的,清楚的; 卓越的,不寻常的; 有区别的; 确切的;