java线程

看过think in java的了解一个例子,叫花园什么的,反正具体的我也忘记了。讲的是多线程,先把例子贴出来把


import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

class Count{
private int count;
private Random ra=new Random(47);
public synchronized int increment(){
int temp=count;
if(ra.nextBoolean()) Thread.yield();
return (count=++temp);
}
public synchronized int value(){
return count;
}
}
class Entrance implements Runnable{
private static Count count=new Count();
private List<Entrance> li=new ArrayList<Entrance>();

private int number=0;
private final int id;

private static volatile boolean canceled=false;

public Entrance(int ids){
id=ids;
li.add(this);
}

public static void isCanceled(){
canceled=true;
}

public void run() {
while(!canceled){
synchronized (this) {
++number;
}
System.out.println(this+" Total :"+count.increment());
try{
TimeUnit.MILLISECONDS.sleep(100);
}
catch(InterruptedException ie){
System.out.println("sleep interrupt");
}
}
System.out.println(this + "canceled");

}

public String toString(){
return "Thread"+id+" : "+number+";";
}

}

public class OrnamentalGarden {

public static void main(String[] args) throws InterruptedException{
ExecutorService es=Executors.newCachedThreadPool();
for(int i=0;i<4;i++){
es.execute(new Entrance(i));
}
TimeUnit.SECONDS.sleep(5);
Entrance.isCanceled();
es.shutdown();
}

}

其中有几处地方不懂,在increment方法中,if(ra.nextBoolean()) Thread.yield();
如果让我们来写,其他的地方可能想的到,但这个地方直接一个return 就行了。
这是为什么呢?(千万不要跟我讲yield()方法,这个方法我还是了解的。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值