package cn.itheima.thread;
import java.util.concurrent.ExecutorService;
public class HelloThread {
public static void main(String[] args) {
ACC acc = new ACC();
new Thread(new Task(acc)).start();
new Thread(new Tesk2(acc)).start();
}
}
class Task implements Runnable{
public ACC acc;
public Task (ACC acc){
this.acc = acc;
}
@Override
public void run() {
for(int i = 0; i<10;i++){
acc.saveMoney();
}
}
}
class Tesk2 implements Runnable{
public ACC acc;
public Tesk2(ACC acc){
this.acc = acc;
}
@Override
public void run() {
for(int i = 0; i<10;i++){
acc.saveMoney();
}
}
}
class ACC {
public int balance = 0;
public synchronized void saveMoney (){
this.notifyAll();
balance +=1000;
try {
Thread.sleep(200);
System.out.println(Thread.currentThread().getName()+"线程" + "balance 金额为"+ balance);
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class TestRun implements Runnable{
@Override
public void run() {
System.out.println("hello action ");
}
}
显示结果:
这个线程问题,得仔细理解!
多个线程操作同一份数据,就可能导致线程出现安全问题,此时解决这个问题的方案,就是加锁机制
至于wait 和 notify 可以实现两个线程的交互协作问题,
上面的线程交逻辑很简单,就是你运行一次,我运行一次,就是当第一次我运行的时候,我把你叫醒,我继续运行,然后等待,
wait 方法会释放cpu 的执行权(释放了锁),此时另外一个线程就能确保获得执行权,那么另外一个线程就 能够得到锁,开始执行!
各位,真不理解,就去下载教程看看!
保证格外有一个清晰的掌握
链接:https://pan.baidu.com/s/1OSgJXeBIabmga8VDIVg9_w
提取码:9iy6