看过think in java的了解一个例子,叫花园什么的,反正具体的我也忘记了。讲的是多线程,先把例子贴出来把
其中有几处地方不懂,在increment方法中,if(ra.nextBoolean()) Thread.yield();
如果让我们来写,其他的地方可能想的到,但这个地方直接一个return 就行了。
这是为什么呢?(千万不要跟我讲yield()方法,这个方法我还是了解的。)
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()方法,这个方法我还是了解的。)