简介
使用synchronized, 来实现两个线程的同步操作.
参考链接
https://www.cnblogs.com/leihuazhe/p/7898563.html
TIPS
唤醒一个在等待资源的线程.
public final native void notify();
阻塞资源, 等待被唤醒.
public final void wait() throws InterruptedException {
wait(0);
}
Synchronized 锁的对象是方法的调用者, 两个方法用的是同一个锁, 谁先拿到谁先执行
code
/**
* Created by lee on 2021/6/21.
*/
public class Add {
public synchronized void one() throws InterruptedException {
boolean flag = true;
while(flag) {
for(int i = 1; i<=99; i+=2) {
System.out.println(Thread.currentThread().getName()+ " i " + i);
if(i == 99) {
flag = false;
this.notify();
break;
}
this.notify();
this.wait();
}
}
}
public synchronized void two() throws InterruptedException {
boolean flag = true;
while(flag) {
for(int i = 2; i<=100; i+=2) {
System.out.println(Thread.currentThread().getName()+ " i " + i);
if(i == 100) {
flag = false;
this.notify();
break;
}
this.notify();
this.wait();
}
}
}
public static void main(String[] args) {
Add a = new Add();
new Thread(()->{
try {
a.one();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"A").start();
new Thread(()->{
try {
a.two();
} catch (InterruptedException e) {
e.printStackTrace();
}
},"B").start();
}
}
结果
B i 98
A i 99
B i 100
---------------------------我的天空里没有太阳,总是黑夜,但并不暗,因为有东西代替了太阳。虽然没有太阳那么明亮,但对我来说已经足够。凭借着这份光,我便能把黑夜当成白天。我从来就没有太阳,所以不怕失去。
--------《白夜行》