java多线程学习经典教程.doc

java多线程学习经典教程.doc

ID:50991806

大小:158.00 KB

页数:42页

时间:2020-03-08

java多线程学习经典教程.doc_第1页
java多线程学习经典教程.doc_第2页
java多线程学习经典教程.doc_第3页
java多线程学习经典教程.doc_第4页
java多线程学习经典教程.doc_第5页
资源描述:

《java多线程学习经典教程.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java中的多线程在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口。对于直接继承Thread的类来说,代码大致框架是:?123456789101112class类名extendsThread{方法1;方法2;…publicvoidrun(){//othercode…}属性1;属性2;…}先看一个简单的例子:?1234567891011121314/***@authorRollen-Holt继承Thread类,直接调用run方法**/classhelloext

2、endsThread{publichello(){}publichello(Stringname){this.name=name;}publicvoidrun(){for(inti=0;i<5;i++){System.out.println(name+"运行"+i);}}publicstaticvoidmain(String[]args){1516171819202122232425262728helloh1=newhello("A");helloh2=newhello("B");h1.run();h2.r

3、un();}privateStringname;}【运行结果】:A运行0A运行1A运行2A运行3A运行4B运行0B运行1B运行2B运行3B运行4我们会发现这些都是顺序执行的,说明我们的调用方法不对,应该调用的是start()方法。当我们把上面的主函数修改为如下所示的时候:?123456publicstaticvoidmain(String[]args){helloh1=newhello("A");helloh2=newhello("B");h1.start();h2.start();}然后运行程序,输出的可

4、能的结果如下:A运行0B运行0B运行1B运行2B运行3B运行4A运行1A运行2A运行3A运行4因为需要用到CPU的资源,所以每次的运行结果基本是都不一样的,呵呵。注意:虽然我们在这里调用的是start()方法,但是实际上调用的还是run()方法的主体。那么:为什么我们不能直接调用run()方法呢?我的理解是:线程的运行需要本地操作系统的支持。如果你查看start的源代码的时候,会发现:?1234567publicsynchronizedvoidstart(){/***Thismethodisnotinvok

5、edforthemainmethodthreador"system"*groupthreadscreated/setupbytheVM.Anynewfunctionalityadded*tothismethodinthefuturemayhavetoalsobeaddedtotheVM.**Azerostatusvaluecorrespondstostate"NEW".891011121314151617*/if(threadStatus!=0

6、

7、this!=me)thrownewIllegalThread

8、StateException();group.add(this);start0();if(stopBeforeStart){stop0(throwableFromStop);}}privatenativevoidstart0();注意我用红色加粗的那一条语句,说明此处调用的是start0()。并且这个这个方法用了native关键字,次关键字表示调用本地操作系统的函数。因为多线程的实现需要本地操作系统的支持。但是start方法重复调用的话,会出现java.lang.IllegalThreadStateExce

9、ption异常。通过实现Runnable接口:大致框架是:?1234567891011class类名implementsRunnable{方法1;方法2;…publicvoidrun(){//othercode…}属性1;属性2;…}12来先看一个小例子吧:?1234567891011121314151617181920212223/***@authorRollen-Holt实现Runnable接口**/classhelloimplementsRunnable{publichello(){}publiche

10、llo(Stringname){this.name=name;}publicvoidrun(){for(inti=0;i<5;i++){System.out.println(name+"运行"+i);}}publicstaticvoidmain(String[]args){helloh1=newhello("线程A");Threaddemo=newThread(h1);helloh2=newhello("线程B"

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。