package thread;
/**
* 多线程并发安全问题 synchronized
* 当多个线程并发访问统一资源时,由于线程切换实际的
* 不确定性会导致操作顺序违背代码设计的执行流程而出现混乱
* 严重时可能导致系统瘫痪
*
* @author 清风已来
*
*/
public class synDemo1 {
public static void main(String[] args) {
final Table table =new Table();
Thread t1 =new Thread() {
public void run() {
while(true) {
int bean =table.getBean();
Thread.yield();
System.out.println(getName()+":"+bean);
}
}
};
Thread t2 =new Thread() {
public void run() {
while(true) {
int bean =table.getBean();
Thread.yield();
System.out.println(getName()+":"+bean);
}
}
};
t1.start();
t2.start();
}
}
class Table{
private int beans =20;
/*
* 当一个方法被synchronized修饰后,该方法称为同步方法,即:
* 多个线程不能同时在方法内部执行
*
*/
public synchronized int getBean() {
if(beans==0) {
throw new RuntimeException("没有豆子了");
}
Thread.yield();
return beans--;
}
}