Java多线程常用的几个关键字_第1页
Java多线程常用的几个关键字_第2页
Java多线程常用的几个关键字_第3页
Java多线程常用的几个关键字_第4页
Java多线程常用的几个关键字_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——Java多线程常用的几个关键字Java多线程常用的几个关键字

本文是我探寻整理的关于Java多线程常用的几个关键字,供参考借鉴,梦想对大家有所扶助!想了解更多相关信息请持续关注我们我!

一、同步(synchronized)和异步(asynchronized)

1、同步synchronized简朴说可以理解为共享的意思,假设资源不是共享的,就没必要举行同步。设置共享资源为同步的话,可以制止一些脏读处境。

2、异步asynchronized简朴说可以理解为独立不受到其他任何制约。

举个例子:

线程1调用了带有synchronized关键字的方法methodA,线程2调用了异步方法methodB,展现的现象是同时操纵台输出t1,t2。

packagecom.ietree.multithread.sync;

/**

*多线程之对象同步锁和异步锁Demo

*

*@authorietree

*/

publicclassSynAndAsynDemo

publicstaticvoidmainString[]args

finalSynAndAsynDemomo=newSynAndAsynDemo;

Threadt1=newThreadnewRunnable

@Override

publicvoidrun

mo.methodA;

,t1;

Threadt2=newThreadnewRunnable

@Override

publicvoidrun

mo.methodB;

,t2;

t1.start;

t2.start;

//方法A

publicsynchronizedvoidmethodA

try

System.out.printlnThread.currentThread.getName;

//休眠4秒

Thread.sleep4000;

catchInterruptedExceptione

e.printStackTrace;

//方法B

publicvoidmethodB

System.out.printlnThread.currentThread.getName;

线程1调用了带有synchronized关键字的方法methodA,线程2调用了带有synchronized关键字的方法methodB,展现的.现象是首先输出t1,等待4秒之后再输出t2。

packagecom.ietree.multithread.sync;

/**

*多线程之对象同步锁和异步锁Demo

*

*@authorietree

*/

publicclassSynAndAsynDemo

publicstaticvoidmainString[]args

finalSynAndAsynDemomo=newSynAndAsynDemo;

Threadt1=newThreadnewRunnable

@Override

publicvoidrun

mo.methodA;

,t1;

Threadt2=newThreadnewRunnable

@Override

publicvoidrun

mo.methodB;

,t2;

t1.start;

t2.start;

//方法A

publicsynchronizedvoidmethodA

try

System.out.printlnThread.currentThread.getName;

//休眠4秒

Thread.sleep4000;

catchInterruptedExceptione

e.printStackTrace;

//方法B

publicsynchronizedvoidmethodB

System.out.printlnThread.currentThread.getName;

结论:

在第一段代码中t1线程先持有object对象的Lock锁,t2线程可以以异步的方式调用对象中的非synchronized修饰的方法,所以同时输出;

在其次段代码中t1线程先持有object对象的Lock锁,t2线程假设在这个时候调用对象中的同步(synchronized)方法那么需等待,也就是同步。

Java多线程常用的几个关键字

二、volatile

作用:volatile关键字的作用是:使变量在多个线程间可见(具有可见性),但是仅靠volatile是不能保证线程的安好性,volatile关键字不具备synchronized关键字的原子性。

Demo1:

packagecom.ietree.multithread.sync;

publicclassRunThreadextendsThread

//volatile

privatebooleanisRunning=true;

privatevoidsetRunningbooleanisRunning

this.isRunning=isRunning;

publicvoidrun

System.out.println进入run方法..;

inti=0;

whileisRunning==true

//..

System.out.println线程中断;

publicstaticvoidmainString[]argsthrowsInterruptedException

RunThreadrt=newRunThread;

rt.start;

Thread.sleep1000;

rt.setRunningfalse;

System.out.printlnisRunning的值已经被设置了false;

程序输出:

进入run方法..

isRunning的值已经被设置了false

之后进入死循环

Demo2:

packagecom.ietree.multithread.sync;

publicclassRunThreadextendsThread

//volatile

privatevolatilebooleanisRunning=true;

privatevoidsetRunningbooleanisRunning

this.isRunning=isRunning;

publicvoidrun

System.out.println进入run方法..;

inti=0;

whileisRunning==true

//..

System.out.println线程中断;

publicstaticvoidmainString[]argsthrowsInterruptedException

RunThreadrt=newRunThread;

rt.start;

Thread.sleep1000;

rt.setRunningfalse;

System.out.printlnisRunning的值已经被设置了false;

程序输出:

isRunning的值已经被设置了false

线程中断

总结:当多个线程之间需要根据某个条件确定哪个线程可以执行时,要确保这个条件在线程之间是可见的。因此,可以用volatile修饰。

volatile与synchronized的对比:

①volatile轻量级,只能修饰变量。synchronized重量级,还可修饰方法

②volatile只能保证数据的可见性,不能用来同步,由于多个线程并发访问volatile修饰的变量不会阻塞

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论