多线程编程模板下: 判断 干活 通知 判断为了防止虚假唤醒, 此处的判断必须用while进行判断而不能用if进行判断,,,if判断为何会用虚假唤醒,能够仔细考虑清楚。java
JUC的线程间通讯:编程
使用:多线程
使用建立好的lock对象建立一个condition对象,Contidion condition = lock.newCondition()。spa
经常使用方法:线程
condition.await() 等待对象
condition.singnalAll()通知it
demoio
package my.test;模板
import java.util.concurrent.locks.Condition;class
import java.util.concurrent.locks.ReentrantLock;
/**
*
* 线程间通讯
* @author Liang Wenjie
* @version 1.00
* @time 2019/8/26 0026 下午 10:40
*/
public class ConditionTest {
public static void main(String[] args) {
MyConditon myConditon = new MyConditon();
for (int i=0; i<=10 ; i++) {
new Thread(()->{
myConditon.Method();
},"AA").start();
}
for (int i=0; i<=10 ; i++) {
new Thread(()->{
myConditon.Method1();
},"BB").start();
}
}
}
/**
* 判断 干活 通知
*/
class MyConditon{
int i = 0;
ReentrantLock lock = new ReentrantLock();
Condition cd = lock.newCondition();
public void Method(){
lock.lock();
try {
//判断
while (i != 0){
cd.await();
}
//干活
++i;
System.out.println("进行加法运算" + i );
//通知
cd.signalAll();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void Method1(){
lock.lock();
try {
//判断
while (i != 1) {
cd.await();
}
//干活
--i;
System.out.println("进行减法运算" + i );
//通知
cd.signalAll();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}