欢迎来到天天文库
浏览记录
ID:59260868
大小:721.50 KB
页数:5页
时间:2020-09-08
《2016多线程的常用操作方法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1、课程名称:多线程的常用操作方法2、知识点2.1、上次课程的主要知识点多线程的实现。2.2、本次预计讲解的知识点线程的命名操作、线程的休眠、线程优先级。3、具体内容(★★★★★)线程的所有操作方法几乎都在Thread类中定义好了。3.1、线程的命名和取得从本质上来讲多线程的运行状态并不是固定的。所以来讲要想确定线程的执行,唯一的区别就在于线程的名称上。在起名的时候就应该尽可能避免重名,或者避免修改名称。在Thread类中提供有如下的方法可以实现线程名称的操作:·构造方法:publicThread(Runnabl
2、etarget,Stringname)·设置名字:publicfinalvoidsetName(Stringname);·取得名字:publicfinalStringgetName()。既然线程的执行本身是不确定的状态,所以如果要取得线程名字的话,那么唯一能做的就是取得当前的线程名字。所以在Thread类里面提供有这样的方法:publicstaticThreadcurrentThread()。范例:线程的命名和取得packagecn.mldn.demo;classMyThreadimplementsRunnabl
3、e{@Overridepublicvoidrun(){for(intx=0;x<10;x++){System.out.println(Thread.currentThread().getName()+",x="+x);}}}publicclassTestDemo{publicstaticvoidmain(Stringargs[])throwsException{MyThreadmt=newMyThread();newThread(mt,"线程A").start();newThread(mt).start();ne
4、wThread(mt).start();}}如果在设置线程对象时没有设置具体的名字,那么就采用一个默认的名字进行定义。范例:观察以下代码packagecn.mldn.demo;classMyThreadimplementsRunnable{@Overridepublicvoidrun(){System.out.println("MyThread线程类:"+Thread.currentThread().getName());}}publicclassTestDemo{publicstaticvoidmain(Str
5、ingargs[])throwsException{MyThreadmt=newMyThread();newThread(mt).start();//线程启动调用run()方法mt.run();//直接通过对象调用run()方法}}MyThread线程类:main(mt.run())MyThread线程类:Thread-0(newThread(mt).start())线程一定是依附于进程存在的,但是现在的进程在那里呢?每当使用java命令在JVM上解释某一个程序执行的时候,那么都会默认的启动一个JVM的进程,而主
6、方法只是这进程中的一个线程,所以整个程序一直都跑在线程的运行机制上。每一个JVM至少会启动两个线程:主线程、GC线程。3.2、线程的休眠如果要想让某些线程延缓执行,那么就可以使用休眠的方式来进行处理,在Thread类里面提供有如下休眠操作:·休眠方法:publicstaticvoidsleep(longmillis)throwsInterruptedException;如果休眠的时间没到就停止休眠了,那么就会产生中断异常。范例:观察休眠packagecn.mldn.demo;classMyThreadimplem
7、entsRunnable{@Overridepublicvoidrun(){for(intx=0;x<100;x++){try{Thread.sleep(1000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+",x="+x);}}}publicclassTestDemo{publicstaticvoidmain(Stringargs[])throwsE
8、xception{MyThreadmt=newMyThread();newThread(mt,"线程A").start();newThread(mt,"线程B").start();newThread(mt,"线程C").start();}}以上的代码执行中感觉像是所有的线程对象都同时休眠了。但是严格来讲不是同时,是有先后顺序的,只不过这个顺序小一点而已。packagecn
此文档下载收益归作者所有