public class SyncDemo1 {
public static void main(String[] args) {
Table table = new Table();
Person p1 = table.new Person();
Person p2 = table.new Person();
p1.start();
p2.start();
}
}
class Table{
int beans=20;
Object monitor = new Object(); //同步监视器, 同步锁
//boolean monitor.lock = false
public synchronized int getBean(){
int a = 5;
if(beans==0)
throw new RuntimeException("没了");
Thread.yield();
return beans--;
}
class Person extends Thread{
public void run(){
while(true){
int bean = getBean();
System.out.println(getName()+"拿到:"+bean);
Thread.yield();
}
}
}
}上面的代码运行如下Thread-1拿到:20
Thread-0拿到:19
Thread-1拿到:18
Thread-0拿到:17
Thread-0拿到:16
Thread-1拿到:15
Thread-1拿到:14
Thread-0拿到:13
Thread-1拿到:12
Thread-1拿到:10
Thread-0拿到:11
Thread-0拿到:9
Thread-1拿到:8
Thread-1拿到:7
Thread-0拿到:6
Thread-0拿到:4
Thread-1拿到:5
Thread-0拿到:3
Thread-1拿到:2
Thread-0拿到:1现问:整个运行过程是怎么样的,能帮我分析下吗,thanks
public static void main(String[] args) {
Table table = new Table();
Person p1 = table.new Person();
Person p2 = table.new Person();
p1.start();
p2.start();
}
}
class Table{
int beans=20;
Object monitor = new Object(); //同步监视器, 同步锁
//boolean monitor.lock = false
public synchronized int getBean(){
int a = 5;
if(beans==0)
throw new RuntimeException("没了");
Thread.yield();
return beans--;
}
class Person extends Thread{
public void run(){
while(true){
int bean = getBean();
System.out.println(getName()+"拿到:"+bean);
Thread.yield();
}
}
}
}上面的代码运行如下Thread-1拿到:20
Thread-0拿到:19
Thread-1拿到:18
Thread-0拿到:17
Thread-0拿到:16
Thread-1拿到:15
Thread-1拿到:14
Thread-0拿到:13
Thread-1拿到:12
Thread-1拿到:10
Thread-0拿到:11
Thread-0拿到:9
Thread-1拿到:8
Thread-1拿到:7
Thread-0拿到:6
Thread-0拿到:4
Thread-1拿到:5
Thread-0拿到:3
Thread-1拿到:2
Thread-0拿到:1现问:整个运行过程是怎么样的,能帮我分析下吗,thanks
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货