版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文格式为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 特技幼师职业资格考试试题及答案
- 花卉园艺考试题目及答案
- 湖南银行笔试题目及答案
- 2025年河北邯郸经济技术开发区公共事业发展有限公司公开招聘工作人员20名考试参考试题及答案解析
- 【2025秋八上道法阶段测试卷】第2单元综合评价(原卷版)
- GB/T 31439.1-2025波形梁钢护栏第1部分:两波形梁钢护栏
- 2024年柯城区教育局下属事业单位选调工作人员考试真题
- 高职院校十五五人才培养工作报告
- 2025年汽车内饰材料气味释放质量控制探讨可行性研究报告
- 售后服务人员工作自我总结范文
- 2025年高中语文必修上册第二单元大单元教学设计
- 2024-2025学年广东省广州六中等校联考七年级(上)期中语文试卷
- (2025年)建筑起重信号司索工考试题库(附答案)
- 通信管道施工安全培训课件
评论
0/150
提交评论