欢迎来到天天文库
浏览记录
ID:8930558
大小:64.50 KB
页数:5页
时间:2018-04-12
《java多线程实现和应用总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、一.Java多线程的实现方式JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。二.继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。看源码如
2、下:PublicclassThreadimplementsRunnable{。。。。。。略。。。。。publicsynchronizedvoidstart(){/***Thismethodisnotinvokedforthemainmethodthreador"system"*groupthreadscreated/setupbytheVM.Anynewfunctionalityadded*tothismethodinthefuturemayhavetoalsobeaddedtotheVM.**Azerostatusvaluecorrespondstostate"NEW".*/if(threa
3、dStatus!=0)thrownewIllegalThreadStateException();group.add(this);start0();if(stopBeforeStart){stop0(throwableFromStop);}}privatenativevoidstart0();。。。。。。略。。。。。这种方式实现多线程很简单,通过自己的类直接extendThread,并覆盖run()方法,就可以启动新线程并执行自己定义的run()方法。示例如下:publicclassMyThreadextendsThread{@Overridepublicvoidrun(){System.ou
4、t.println(currentThread().getName()+"====线程开始执行=====");try{sleep(3000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(currentThread().getName()+"====线程执行结束=====");}5publicstaticvoidmain(String[]args){MyThreadmyt1=newMyThread();//创建线程1MyThreadmyt2=newMyThread();//创建线程2//启动线程myt
5、1.start();myt2.start();}}线程执行结果可能如下:Thread-0====线程开始执行=====Thread-1====线程开始执行=====Thread-0====线程执行结束=====Thread-1====线程执行结束=====一.实现Runnable接口实现多线程如果自己的类已经extends另一个类,就无法直接extendsThread,此时,必须实现一个Runnable接口,实例如下:publicclassMyRunnableimplementsRunnable{publicvoidrun(){System.out.println(Thread.current
6、Thread().getName()+"====线程开始执行=====");try{Thread.sleep(3000);}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"====线程执行结束=====");}publicstaticvoidmain(String[]args){MyRunnablemyr=newMyRunnable();//Runnable无法创建实例,必须借助与ThreadThreadt1=newThread(myr)
7、;Threadt2=newThread(myr);t1.start();t2.start();}}如果需要启动一个线程,必须首先实例化一个Thread,并传入Runnable实例,调用start()方法启动线程;事实上,当传入一个Runnabletarget参数给Thread后,Thread的run()方法就会调用target.run()。看源码如下:。。。。。。略。。。。。publicThrea
此文档下载收益归作者所有