java中的创建并开始了多个线程,为什么只有一个线程在执行程序?

Hairui瑞 2019-08-04 11:10:02
最近在学习多线程的时候,做了一个模拟电影院售票的案例,我创建了三个线程,也开启了三个线程,为了避免线程安全问题,我用了同步代码块,但在运行的时候发现永远只有一个线程在运行,想知道我的代码哪里有错误,谢谢大家


//Runnable的实现类对象
public class RunnableImpl implements Runnable {

private int ticket = 100;//票的张数

@Override
public void run() {
while (true) {
synchronized (this) {//使用线程锁,这里是一个同步代码块,用于解决线程安全问题
if (ticket > 0) {
try {//因为sleep有异常这里用try...catch解决异常
Thread.sleep(10);//让程序休眠10毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在卖第" + ticket + "张票");
ticket--;
} else
break;
}
}
}
}

//运行的类
public class RunnableMain {

public static void main(String[] args) {

RunnableImpl run = new RunnableImpl();//创建实现类对象

Thread t0 = new Thread(run);
Thread t1 = new Thread(run);
Thread t2 = new Thread(run);

t0.start();//开启多线程
t1.start();
t2.start();
}
}


这是运行的图片,永远都是线程0
...全文
1456 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42950629 2022-01-12
  • 打赏
  • 举报
回复

把休眠时间调大一点应该也行

Hairui瑞 2019-08-04
  • 打赏
  • 举报
回复
谢谢两位,已经好了,是票的数太小了
haha9417 2019-08-04
  • 打赏
  • 举报
回复
应该是 把票数改多一点吧 10000差不多
立刀流 2019-08-04
  • 打赏
  • 举报
回复
你把票改小点,多试几次。

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧