急急急急急急急急急急
QJ02. 有如下测试synchronized关键字作用的程序,程序希望通过得到如下输出证明synchronized代码块同时只能被一个线程访问。
但是现在程序的输出并不让人满意,请找出问题原因,并改正之。
希望得到的输出
A0
A1
A2
B0
B1
B2
程序代码
public class ThreadTest implements Runnable {
public void run() {
synchronized (this) {
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + i);
}
}
}
public static void main(String[] args) {
Thread ta = new Thread(new ThreadTest(), "A ");
Thread tb = new Thread(new ThreadTest(), "B ");
ta.start();
tb.start();
}
}
[解决办法]
public class ThreadTest implements Runnable
{
public void run()
{
synchronized (this)
{
for (int i = 0; i < 3; i++)
{
// try
// {
// Thread.sleep(100);
// }
// catch (InterruptedException e)
// {
// e.printStackTrace();
// }
System.out.println(Thread.currentThread().getName() + i);
}
}
}
public static void main(String[] args)
{
Thread ta = new Thread(new ThreadTest(), "A ");
Thread tb = new Thread(new ThreadTest(), "B ");
ta.start();
tb.start();
}
}
Thread.sleep(100);把这个去掉,这个是让线程休眠,当A sleep后,自然就轮到B了。所以出现上面的结果。
[解决办法]
楼主,你不会答我出的题,问问倒也无妨,连我编的题号你都不改呀…… 无语了……