为啥我的java程序明明开启了4条线程,却只有一条线程在运行?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我的java程序明明开启了4条线程,却只有一条线程在运行?相关的知识,希望对你有一定的参考价值。

package com.heima.syn;

public class Demo4_Ticket

/**
* @param args
* 火车站卖票的例子用实现Runnable接口 //此办法做不出来
*/
public static void main(String[] args)
MyTicket mt = new MyTicket();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();

/*Thread t1 = new Thread(mt); //多次启动一个线程是非法的
t1.start();
t1.start();
t1.start();
t1.start();*/




class MyTicket implements Runnable
private int tickets = 100000;
@Override
public void run()
while(true)
synchronized(this)
if(tickets <= 0)
break;

try
Thread.sleep(10); //线程1睡,线程2睡,线程3睡,线程4睡
catch (InterruptedException e)

e.printStackTrace();

System.out.println(Thread.currentThread().getName() + "...这是第" + tickets-- + "号票");





结果
Thread-0...这是第100000号票
Thread-0...这是第99999号票
Thread-0...这是第99998号票
Thread-0...这是第99997号票
。。。。。。

参考技术A 是匿名对象的原因,匿名对象不是强引用,对象声明生命周期短,当第一条线程执行run之后,二三四条线程应该是被虚拟机回收了。一般多线程都不用匿名对象 参考技术B Thread t1 = new Thread(r1, "1号窗口");// 创建线程
Thread t2 = new Thread(r1, "2号窗口");// 创建线程
Thread t3 = new Thread(r1, "3号窗口");// 创建线程
Thread t4 = new Thread(r1, "4号窗口");// 创建线程
t1.start();
t2.start();
这样创建多线程
参考技术C 你要等待久一点,才可以看到其他的线程,因为线程是不稳定的。。。

以上是关于为啥我的java程序明明开启了4条线程,却只有一条线程在运行?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA基础——线程

线程中断以及线程中断引发的那些问题

121 Python程序中的线程操作-线程定时器

Java多线程:

线程优先级

线程优先级