首页 > 编程知识 正文

java开启线程的几种方式,多线程测试

时间:2023-05-03 10:57:26 阅读:160585 作者:755

文章目录弗雷德的状态Thread.State状态类型是状态转移的状态验证“new”-“runnable”-“terminated”-“runnable”-“timed _ waiting”-“rue”

线程状态Thread.State状态类型

在指定的时刻,有一个线程,只有一个状态。 这些状态是JVM的状态,不反映操作系统的状态。

定义Thread的状态是在Thread内部定义的枚举类型。

public enum State { NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED; }我们知道定义共有6种类型。

状态说明NEW尚未启动的线程处于此状态RUNNABLE表示在Java虚拟机上运行的线程处于此状态。 因为它可能正在等待其他资源,如处理器。 线程等待BLOCKED被阻止且一个监视器被锁定,WAITING将在此状态下无限期等待另一个线程的执行。 特定操作的线程处于此状态的TIMED_WAITING等待另一个线程执行。 依赖于指定等待时间操作的线程借用该状态TERMINATED结束的线程处于该状态的状态转移《Java 并发编程的艺术》图

从以上图中可以看出,

start ()函数将线程创建后尚未启动的“NEW”状态转换为“RUNNABLE”状态。 “运行”状态可以通过每个函数在“等待”、“时间等待”、“阻止”和双向之间切换。 “RUNNABLE”状态在线程结束后转移到“TERMINATED”状态。 也就是说,所有状态都以“RUNNABLE”为中心。

状态验证" new "-" Runnable "-" terminated "创建实现runnable的类

publicclassstatetestthreadimplementsrunnable { publicstatetesthread ()//此时的线程还是mainsystem.out.println ) thread } public void run ((system.out.println ) thread.currentthread ).getName ) stateinrun: ) thread.currentthread

publicclassthreadstatetest { publicstaticvoidmain [ ] args } { statetestthread=newstate test thread } thread thread system.out.println (thread.getname ((stateafterconstructor : ) thread.getstate ) ); try{thread.sleep(1000L ); thread.start (; thread.sleep(1000L; system.out.println (thread.getname ((stateafterrun : ) thread.getstate ) ); } catch (内部扩展) { e.printStackTrace ); }}运行结果

runnable -“timed _ waiting”publicclassthreadstatetest { publicstaticvoidmain { string [ ] args } { thread thread=new for(intI=0; I(125; I ) intj=(int ) Math.sqrt(i ) I; //该条件永远不成立,if(j*jI ) { break; } longend=system.current time millis (; system.out.println (calculate end : ) (end-begin ); try { system.out.println (begin sleep ); thread.sleep(5000L; system.out.println(endsleep ); } catch (内部扩展) { e.printStackTrace ); }}; try { thread.start (; thread.sleep(100L; system.out.println (thread.getname ((state : ) thread.getstate ) ); thread.sleep(1000L; system.out.println (thread.getname ((state : ) thread.getstate ) ); } catch (内部扩展) { e.printStackTrace ); }}结果如下。

Thread-0的状态将从RUNNABLE转换为TIMED_WAITING

runnable -“waiting”publicstaticvoidmain (string [ ] args ) threadthread=newthread ) new runnable { final object } pobject }catch(interruptedexceptione ) }; thread.start (; system.out.println (thread.getname ((state : ) thread.getstate ) ); try{thread.sleep(1000L ); } catch (内部扩展) {e.printStackTrace ); } system.out.println (thread.getname ((state : ) thread.getstate ) ); }运行结果

runnable-blocked http://www.Sina.com /

publicstaticvoidmain (string [ ] args ) threadthread=newthread ) newrunnable ) {final Object lock=new Object; 公共void run ()同步(lock ) ) try ) lock.wait ); }catch(interruptedexceptione ) }; thread.start (; system.out.println (thread.getname ((state : ) thread.getstate ) ); try{thread.sleep(1000L ); } catch (内部扩展) {e.printStackTrace ); } system.out.println (thread.getname ((state : ) thread.getstate ) ); } 先创建一个 Runnable 子类

publicstaticvoidmain (string [ ] args ) blockedstaterunblockedstaterun=newblockedstaterun ); thread thread1=new thread (blocked staterun ); thread thread2=new thread (blocked staterun ); thread1.setname(first ); thread1.start (; thread2.setname(second ); thread2.start (; try{thread.sleep(200L ); system.out.println (thread1. getname () ' :' thread1.getState ) ); system.out.println (thread2. getname () ' :' thread2.getState ) ); } catch (内部扩展) { e.printStackTrace ); }上次运行的结果:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。