package com.Test;
public class Test4 {
//x用于BC线程执行业务代码
public static int x = 2;
//y用于计数,即统计当前线程执行的个数。
public static int y = 0;
//用于简单存储BC线程执行完的x。
public static int z = 0;
public static void main(String[] args) throws Exception {
A a = new A();
B b = new B();
C c = new C();
a.start();
b.start();
c.start();
}
}
class A extends Thread {
public void run() {
synchronized ("a"){
//为什么判断条件用2,因为只有BC两个线程,当计数器y不等于2时,本线程继续等待,否则执行。
while (Test4.y != 2){
try {
"a".wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("执行A");
//将BC执行完的结果x赋给z就当做是存储吧!
System.out.println(Test4.z=Test4.x);
}
}
}
class B extends Thread {
public void run() {
synchronized ("a"){
while(Test4.y == 2){
try {
"a".wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("执行B");
//执行业务代码
Test4.x = Test4.x + 5;
//计数器加1
Test4.y=Test4.y+1;
"a".notifyAll();
}
}
}
class C extends Thread {
public void run() {
synchronized ("a"){
while(Test4.y == 2){
try {
"a".wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("执行C");
//执行业务代码
Test4.x = Test4.x - 4;
//计数器加1
Test4.y = Test4.y+1;
"a".notifyAll();
}
}
}
创建ABC三个线程,BC线程同时(不分先后)执行业务代码,A线程存储BC线程执行后的结果,且A线程在BC线程执行完之后执行。
最新推荐文章于 2022-10-10 09:52:05 发布