首页 > 编程语言 >java synchronized wait notifyAll Thread

java synchronized wait notifyAll Thread

时间:2023-02-01 12:01:42浏览次数:43  
标签:java Thread 0A notifyAll 马化腾 list 1B 云游 new


虚假唤醒 if

package pc;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class D1 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("马云");
list.add("马化腾");
list.add("云游令");
list.add("黑麒麟");
D1 d1 = new D1();
new Thread(()->{
try {
for (int i = 0; i < 10; i++) {
Random random = new Random();
int i1 = random.nextInt(3);
d1.jia(list.get(i1));
}

} catch (InterruptedException e) {
e.printStackTrace();
}
},"A").start();
new Thread(()->{
try {
for (int i = 0; i < 10; i++) {
Random random = new Random();
int i1 = random.nextInt(3);
d1.jian(list.get(i1));
}

} catch (InterruptedException e) {
e.printStackTrace();
}
},"B").start();

}
private int number = 0;
//+1
public synchronized void jia(String name) throws InterruptedException {
if(number!=0){
//等待
this.wait();
}
number++;
System.out.println(Thread.currentThread().getName()+">"+name+">"+number);
// 通知其他线程,我+1完毕了
this.notifyAll();
}
//-1
public synchronized void jian(String name) throws InterruptedException {
if(number==0){
//等待
this.wait();
}
number--;
System.out.println(Thread.currentThread().getName()+">"+name+">"+number);
// 通知其他线程,我-1完毕了
this.notifyAll();
}
}
A>马云>1
B>马云>0
A>马化腾>1
B>云游令>0
A>马云>1
B>马化腾>0
A>马云>1
B>马化腾>0
A>云游令>1
B>云游令>0
A>马化腾>1
B>马化腾>0
A>马云>1
B>马化腾>0
A>马化腾>1
B>马化腾>0
A>马云>1
B>马化腾>0
A>云游令>1
B>马云>0
Process finished with exit code 0

保证唤醒 while

package pc;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class D1 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("马云");
list.add("马化腾");
list.add("云游令");
list.add("黑麒麟");
D1 d1 = new D1();
new Thread(()->{
try {
for (int i = 0; i < 10; i++) {
Random random = new Random();
int i1 = random.nextInt(3);
d1.jia(list.get(i1));
}

} catch (InterruptedException e) {
e.printStackTrace();
}
},"A").start();
new Thread(()->{
try {
for (int i = 0; i < 10; i++) {
Random random = new Random();
int i1 = random.nextInt(3);
d1.jian(list.get(i1));
}

} catch (InterruptedException e) {
e.printStackTrace();
}
},"B").start();


new Thread(()->{
try {
for (int i = 0; i < 10; i++) {
Random random = new Random();
int i1 = random.nextInt(3);
d1.jia(list.get(i1));
}

} catch (InterruptedException e) {
e.printStackTrace();
}
},"C").start();
new Thread(()->{
try {
for (int i = 0; i < 10; i++) {
Random random = new Random();
int i1 = random.nextInt(3);
d1.jian(list.get(i1));
}

} catch (InterruptedException e) {
e.printStackTrace();
}
},"D").start();

}
private int number = 0;
//+1
public synchronized void jia(String name) throws InterruptedException {
while(number!=0){
//等待
this.wait();
}
number++;
System.out.println(Thread.currentThread().getName()+">"+name+">"+number);
// 通知其他线程,我+1完毕了
this.notifyAll();
}
//-1
public synchronized void jian(String name) throws InterruptedException {
while(number==0){
//等待
this.wait();
}
number--;
System.out.println(Thread.currentThread().getName()+">"+name+">"+number);
// 通知其他线程,我-1完毕了
this.notifyAll();
}
}
A>马化腾>1
B>云游令>0
C>马化腾>1
D>云游令>0
A>马化腾>1
D>云游令>0
C>云游令>1
B>马云>0
C>马化腾>1
D>马化腾>0
A>马化腾>1
D>马云>0
C>云游令>1
B>云游令>0
C>马化腾>1
D>马云>0
A>马云>1
D>马化腾>0
C>云游令>1
B>马化腾>0
C>云游令>1
D>马云>0
A>云游令>1
D>马化腾>0
C>马化腾>1
B>马化腾>0
C>云游令>1
D>马云>0
A>云游令>1
D>马云>0
C>云游令>1
B>马化腾>0
A>云游令>1
B>马化腾>0
A>云游令>1
B>云游令>0
A>马化腾>1
B>马化腾>0
A>马化腾>1
B>马云>0


标签:java,Thread,0A,notifyAll,马化腾,list,1B,云游,new
From: https://blog.51cto.com/u_10780206/6031187

相关文章

  • java 读写文本
    /****@parampath*@paramcharsetNameutf-8gbk*@return*/publicstaticList<String>readtFile(Stringpath,StringcharsetName){......
  • java字符串拼接逗号分隔
    List<String>a=newArrayList<>();a.add("123");//a.add("3213");//a.add("3213");//a.add("213");//a.add("1......
  • JavaScript奇技淫巧:操控URL
    JavaScript奇技淫巧:操控URL本文展示两种不常见的JS编程技巧:实现操控浏览器窗口,更改父窗口和子窗口的URL地址。修改父窗口URL当使用window.open()打开一个窗口,可以用window.......
  • Guava:google公司开发的一款Java类库扩展工具包
    Guava是google公司开发的一款Java类库扩展工具包文档https://github.com/google/guavahttps://github.com/google/guava/wikihttps://guava.dev/releases/snapshot-jre......
  • 面试官:你说说 JavaScript 中类型的转换机制
    前言面试官:“你说说JavaScript中类型的转换机制”紧张的萌新:“字符串跟其他类型拼接会变成字符串...”面试官:“...”······大家好,我是CoderBin。又来到了面试官......
  • Java中的对集合便利的方式有区别吗
    提问: 问题遇到的现象和发生背景在学习mybatis遍历结果的时候,突然想起有好多种遍历方式,但是我本身并不清楚这些遍历的原理,很难理解他们之间的不同用代码块功能插入代码,请......
  • java对方法进行反射
    1.获取类的class信息2.获取method3.invoke方法执行method 被反射对象```@Data@AllArgsConstructor@NoArgsConstructorpublicclassUser{privateStringid;......
  • JavaScript 中更安全的 URL 读写
    前言URL对于我们开发人员来讲,应该是非常熟悉了。在对URL进行参数拼接时,我们一般都会直接进行字符串拼接或使用模版字符串,因为这样非常方便,但是我们这样其实会在不知不觉中......
  • java:Object是不是泛型?
    我们知道Object是所有类型的父类。可以把任意类型转换成Object来存储。那么Object是不是泛型?当我们需要定义一个变量,用来接收任意类型的变量时,可以不可以将该参数定义为Obj......
  • java 识别苹果真实图片格式
    //修改后缀之后的heic图片Filefile=newFile("C:/Users/admin/Pictures/pic/IMG_2702.HEIC");Tikatika=newTika();StringmimeType=tika.detect(file);Syste......