首页上一页 1 下一页尾页 3 条记录 1/1页
wait方法执行后,为什么只有几次是和预期的结果一样?
发表在Java图书答疑
2010-12-30
是否精华
是
否
版块置顶:
是
否
//运行的结果可能和预期的结果不同
/*
*t1进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t1等待1秒
t2进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t2等待1秒
t1休眠了2秒
t1输出字符串我一边抽烟,一边编程
t2休眠了2秒
t2输出字符串我一边抽烟,一边编程
*
*/
/*
* t1进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t1等待1秒
t2进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t2等待1秒
t2休眠了2秒
t2输出字符串我一边抽烟,一边编程
t1休眠了2秒
t1输出字符串我一边抽烟,一边编程
*/
public class ThreadWaitNotifyDemo implements Runnable{
private synchronized void readString(String content)
{
String name=Thread.currentThread().getName();
System.out.println(name+"进入了同步方法readString()");
System.out.println("当前对象是"+this);
try {
System.out.println(name+"等待1秒");
wait(1000);//让出锁一秒,相当于this.wait(1000);
Thread.sleep(1000*2);//休眠2秒,没有让出锁
System.out.println(name+"休眠了2秒");
} catch (Exception e) {
// TODO: handle exception
}
System.out.print(name+"输出字符串");
for(int i=0;i<content.length();i++)
{
System.out.print(content.charAt(i));
}
System.out.println();
}
public void run()
{
String string="我一边抽烟,一边编程";
readString(string);
}
public static void main(String args[])
{
Runnable runnable=new ThreadWaitNotifyDemo();
Thread t1=new Thread(runnable,"t1");
Thread t2=new Thread(runnable ,"t2");
t1.start();
t2.start();
}
}
/*
*t1进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t1等待1秒
t2进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t2等待1秒
t1休眠了2秒
t1输出字符串我一边抽烟,一边编程
t2休眠了2秒
t2输出字符串我一边抽烟,一边编程
*
*/
/*
* t1进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t1等待1秒
t2进入了同步方法readString()
当前对象是ThreadWaitNotifyDemo@61de33
t2等待1秒
t2休眠了2秒
t2输出字符串我一边抽烟,一边编程
t1休眠了2秒
t1输出字符串我一边抽烟,一边编程
*/
public class ThreadWaitNotifyDemo implements Runnable{
private synchronized void readString(String content)
{
String name=Thread.currentThread().getName();
System.out.println(name+"进入了同步方法readString()");
System.out.println("当前对象是"+this);
try {
System.out.println(name+"等待1秒");
wait(1000);//让出锁一秒,相当于this.wait(1000);
Thread.sleep(1000*2);//休眠2秒,没有让出锁
System.out.println(name+"休眠了2秒");
} catch (Exception e) {
// TODO: handle exception
}
System.out.print(name+"输出字符串");
for(int i=0;i<content.length();i++)
{
System.out.print(content.charAt(i));
}
System.out.println();
}
public void run()
{
String string="我一边抽烟,一边编程";
readString(string);
}
public static void main(String args[])
{
Runnable runnable=new ThreadWaitNotifyDemo();
Thread t1=new Thread(runnable,"t1");
Thread t2=new Thread(runnable ,"t2");
t1.start();
t2.start();
}
}