java多线程的学习

java多线程的学习

ID:39551564

大小:237.00 KB

页数:26页

时间:2019-07-06

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

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

1、Java多线程的学习Java线程一般我们写的程序是单线程的,其main函数就是启动单线程的入口。在java中可以实现Runable接口或是继承Thread来实现多线程,要实现多线程,就必须执行线程的star方法,执行start方法后,java会在后台启动一个新的线程并执行run方法,当然你也可以直接执行run方法,但是就不会去启动新的线程了。下面是一个多线程的例子publicclassThreadMutile{/***@paramargs*/publicstaticvoidmain(String[]args){Thr

2、eadZout=newThreadZou();t.start();//新启动一个线程for(inti=0;i<100;i++)System.out.println("main");}}classThreadZouextendsThread{@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubfor(inti=0;i<100;i++)System.out.println("zouxiaohu");}}这里会有两个线程一个是main函数,一个是新建立的线程。你会发

3、现其每次执行结果会有所不同,这是因为线程并发运行的结果实现线程有两种方法,上面说的是去继承Thread类,另一个方法是去实现Runable接口,然后将其示例传递给Thread构造器进行实例化一个线程,最后调用start方法来进行新建一个线程。注意:无论是哪种进行实现线程,新建线程的方法永远是进行调用start方法。线程的操作Sleep方法进行暂停,该方法是Thread类的类方法,用法如下:publicstaticvoidmain(String[]args){for(inti=0;i<100;i++){System.o

4、ut.println("tt");try{Thread.sleep(2000);//单位ms}catch(InterruptedExceptione){//TODOAuto-generatedcatchblock}}这里是每隔2秒会进行打印,与暂停对应的方法是半路唤醒,即是interrupt方法。后面会进行介绍;当多个线程访问一个共享资源时此时需要进行方法的同步即是互斥。比如银行的取款的逻辑如下:If存款金额>取款金额进行取款可能会发生的情况是,两个线程a,b进行同时的访问,刚好b线程夹在a线程的确定余额和可用取款之

5、间,那么就会发生两个线程都进行了取钱,最后则是余额是负数了。因此需要进行方法的同步下面是同步块的方法:publicclassBank{privateStringname;privateintmoney;publicBank(Stringname,intmoney){this.money=money;this.name=name;}//进行存款publicsynchronizedvoiddeposit(intm){money+=m;}publicStringgetName(){returnname;}publicvoi

6、dsetName(Stringname){this.name=name;}//进行取款publicsynchronizedbooleanwithdrow(intn){if(money>=n){money=-n;returntrue;}else{returnfalse;}}publicstaticvoidmain(String[]args){}}注意:对于同一实例只能有一个线程去访问同步的方法(如果有两个实例那么一个实例如果有线程在执行同步方法,不会影响到另一实例的锁定即是:只要有实例,就会有一个锁定)也就是说如果有线

7、程在进行去钱调用withdrow方法,那么该线程就会去加锁,其余的线程是无法进行调用其他的同步方法(存钱,取钱)此时只能进行等待获取锁。如果想进行锁定方法的局部,那么可以利用同步代码块synchronized(表达式)后面进行讲解。也可以定义类方法的同步:Publicstaticsynchronizedvoid***这种同步锁定是针对类对象的实例进行锁定,假如类是SomeTh,则是针对SomeTh.class的实例进行锁定的,而一般的方法同步时针对对象的实例进行锁定(static是锁定了所有类对象的实例,而方法的锁定

8、是针对实例的,不同的实例锁是不同的)线程的协作线程之间的协作是通过wait、notify、notifyAll来进行实现的:调用wait方法是首先是要获取到锁,执行此方法后就是线程进行暂停并释放锁Synchronizedmethod(){........obj.Wait();//开始进行等待,释放所}调用notify是会让等待的线程进行唤醒,当执

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

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

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