的程序,是我在某个视频教程里复制的,但运行结果却令我很困惑。
程序是:
class A implements Runnable
{
public int tickets = 100;
String str = new String("哈哈");
public void run()
{
String str = "哈哈";
while (true)
{
synchronized (str)
{
if (tickets > 0)
{
System.out.printf("%s线程正在卖出第%d张票\n",
Thread.currentThread().getName(), tickets);
--tickets;
}
else
{
break;
}
}
}
}
}
public class TestTickets_9
{
public static void main(String[] args)
{
A aa = new A();
Thread t1 = new Thread(aa);
t1.start();
LZ,你的电脑和配置都没问题,是程序有bug,这是一个多线程的程序,tickets这个变量是被t1和t2两个线程共享,加上关键字synchronized 没错,主要问题是,线程t1开始运行后就把变量tickets锁定了,而且在t1执行结束以前都没有放开这个变量(一直在执行循环),当tickets=0的时候线程t1才为它(tickets)解锁,此时线程t2才有机会访问变量tickets,但是此时tickets等于0,故线程t2直接跳出循环,解决的办法很简单,可以让线程t1在执行完一个循环后,把变量tickets解锁一段时间,让线程t2有机会访问它,我让线程t1执行完一个循环就停顿2秒,结果就变成楼主想要的了,一下是我修改后的代码:class A im...
你这里有两个问题第一:main方法里改一下:A aa = new A();A aaa = new A();Thread t1 = new Thread(aa);t1.start();Thread t2 = new Thread(aaa);t2.start();你原来定义的t1和t2事实上是一个线程,改成这样就是两个线程...