java多线程学习经典教程

java多线程学习经典教程

ID:16349879

大小:168.50 KB

页数:42页

时间:2018-08-09

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

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

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

2、llo(){}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.run();}privateStringname;}【运行结果】:A运行0A运

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

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

5、nctionalityadded*tothismethodinthefuturemayhavetoalsobeaddedtotheVM.**Azerostatusvaluecorrespondstostate"NEW".891011121314151617*/if(threadStatus!=0

6、

7、this!=me)thrownewIllegalThreadStateException();group.add(this);start0();if(stopBeforeStart){stop0(throwableFromStop);}}privat

8、enativevoidstart0();注意我用红色加粗的那一条语句,说明此处调用的是start0()。并且这个这个方法用了native关键字,次关键字表示调用本地操作系统的函数。因为多线程的实现需要本地操作系统的支持。但是start方法重复调用的话,会出现java.lang.IllegalThreadStateException异常。通过实现Runnable接口:大致框架是:?123456789101112class类名implementsRunnable{方法1;方法2;…publicvoidrun(){//othercode…}属性1;属

9、性2;…}来先看一个小例子吧:?123456789101112131415161718192021222324/***@authorRollen-Holt实现Runnable接口**/classhelloimplementsRunnable{publichello(){}publichello(Stringname){this.name=name;}publicvoidrun(){for(inti=0;i<5;i++){System.out.println(name+"运行"+i);}}publicstaticvoidmain(String[]

10、args){helloh1=newhello("线程A");Threaddemo=newThread(h1);helloh2=newhello("线程

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

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

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