日期:2014-05-20  浏览次数:20665 次

线程同步问题
public class thread 
{
public static void main(String args[])
{
test a=new test();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();
}
}
class test extends Thread
{
int b=10;
//static Object obj=new Object();
synchronized void print()
{
System.out.println(Thread.currentThread().getName()+":"+b);
b--;
}
public void run()
{
while(b>0)
{
print();
try
{
sleep(1000);//如果换成2000,才能达到理想效果。为什么?
}
catch(Exception e){}

}
}
}

------解决方案--------------------
为达到楼主的目标,不择手段:-)
public class thread {
public static void main(String args[]) {
testsub a = new testsub();
new Thread(a).start();
new Thread(a).start();
new Thread(a).start();
}
}

class testsub extends Thread {
int b = 10;

synchronized void print() {
if (b < 1) {
return;
}
if (Thread.currentThread().getName().endsWith(
String.valueOf(2 - b % 3 == 0 ? 3 : 2 - b % 3))) {
System.out.println(Thread.currentThread().getName() + ":" + b);
b--;
}
}

public void run() {
while (b > 0) {
print();
try {
sleep(1000);
} catch (Exception e) {
}
}
}
}
红色标记的可以不要......