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()方法,这个方法我还是了解的。)

你可能感兴趣的:(java,thread,多线程,IE)