‘壹’ java中,线程有哪五个基本状态 他们之间如何让转化 简述线程周期
java中,每个线程都需经历新生、就绪、运行、阻塞和死亡五种状态,线程从新生到死亡的状态变化称为生命周期。
用new运算符和Thread类或其子类建立一个线程对象后,该线程就处于新生状态。
新生--->就绪:通过调用start()方法
就绪--->运行:处于就绪状态的线程一旦得到CPU,就进入运行状态并自动调用自己的run()方法
运行--->阻塞:处于运行状态的线程,执行sleep()方法,或等待I/O设备资源,让出CPU并暂时中止自己运行,进入阻塞状态
阻塞--->就绪:睡眠时间已到,或等待的I/O设备空闲下来,线程便进入就绪状态,重新到就绪队列中等待CPU。当再次获得CPU时,便从原来中止位置开始继续运行。
运行--->死亡:(1)(正常情况下)线程任务完成
(2)(非正常状况)线程被强制性的中止,如通过执行stop()或destroy()方法来终止一个线程
‘贰’ java 多线程编程 字符串***和###交替输出
java中线程是不精确的,所以线程直接输出的话两个线程执行的先后不能通过程序控制,输出会随机出现。
一下提供一种解决方案:
使用延时实现交替输出
先启动一个线程输出***,线程摄制休眠时间(例如:500)。
延时一段时间(例如:500)启动另外一个线程输出###,同样设置休眠时间,与上一个线程休眠时间相同。
此方法主要是利用延时来实现线程交替执行,此方法要求延时时间足够长(java中毫秒级别无法达到,最好设置为100*X毫秒,实现线程的交替执行)
希望能够帮到你!
‘叁’ JAVA中多线程执行的时间或是顺序的问题
关于JAVA中多线程的问题:可以说是时间问题导致了程序运行后出现多种状况的原因..(现在只谈在一个CPU下运行JAVA程序的效果.)因为当START一个新的子线程后,MAIN方法中的程序执行到这时CPU开始切换,但是这种切换是随即的,跟时间有关,比如你第一次执行可能CPU在MAIN方法中执行到12345停了,然后执行子线程的11 12 13 14 15.。。一段时间后再切换回主线程。所以你看到程序的执行结果不一样。就是因为CPU切换线程(这时候应该叫进程吧)的时间不一样.。这虽然有顺序切换,但也不是你想的那样切回主1次再切回子1次这样来回切..而是0.001秒切一次可以这样比喻.