




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新质生产力国外研究现状
- 新质生产力动能涌现
- 民族服饰汉服课件
- 直梁弯曲内力计算及内力图绘制习题讲解
- 2025年口腔颌面外科手术操作规范性评估试题答案及解析
- 2025年免疫学免疫相关疾病诊治技能考核答案及解析
- 2025年眩晕症康复训练方案设计答案及解析
- 2025年皮肤性病诊断与治疗学术能力评估答案及解析
- 2025年传染病防控与处理突发事件练习答案及解析
- 《统计学-SPSS与Excel实现》(第9版)习题答案 贾俊平
- 2024注册安全工程师《历年计算题型》
- 2025年江苏省开发区运行现状及投资战略研究报告
- 少儿口才培训教案 课件
- 试油hse管理制度
- 市(县)级温室气体排放源、排放清单报告模板
- 《出境旅游领队实务》课件项目一
- 养殖水产日常管理制度
- 门窗定制安装合同范本
- l临床医生三基考试试题及答案
- 《奇异空间》课件 -2024-2025学年湘美版(2024)初中美术七年级下册
- 原发性肝癌患者护理查房
评论
0/150
提交评论