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

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

二、volatile

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

Demo1:

package com.ietree.multithread.sync;

public class RunThread extends Thread {

// volatile

private boolean isRunning = true;

private void setRunning(boolean isRunning) {

this.isRunning = isRunning;

}

public void run() {

System.out.println("进入run方法..");

int i = 0;

while (isRunning == true) {

// ..

}

System.out.println("线程停止");

}

public static void main(String[] args) throws InterruptedException {

RunThread rt = new RunThread();

rt.start();

Thread.sleep(1000);

rt.setRunning(false);

System.out.println("isRunning的值已经被设置了false");

}

}

程序输出:

进入run方法..

isRunning的值已经被设置了false

之后进入死循环

Demo2:

package com.ietree.multithread.sync;

public class RunThread extends Thread {

// volatile

private volatile boolean isRunning = true;

private void setRunning(boolean isRunning) {

this.isRunning = isRunning;

}

public void run() {

System.out.println("进入run方法..");

int i = 0;

while (isRunning == true) {

// ..

}

System.out.println("线程停止");

}

public static void main(String[] args) throws InterruptedException {

RunThread rt = new RunThread();

rt.start();

Thread.sleep(1000);

rt.setRunning(false);

System.out.println("isRunning的值已经被设置了false");

}

}

程序输出:

isRunning的值已经被设置了false

线程停止

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

volatile 与 synchronized 的比较:

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

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

synchronized不仅保证可见性,而且还保证原子性,因为,只有获得了锁的线程才能进入临界区,从而保证临界区中的所有语句都全部执行。多个线程争抢synchronized锁对象时,会出现阻塞。

线程安全性包括两个方面,①可见性。②原子性。

从上面自增的例子中可以看出:仅仅使用volatile并不能保证线程安全性。而synchronized则可实现线程的安全性。

【Java多线程常用的几个关键字】相关文章:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP获取QQ等级,php仿QQ等级太阳显示函数

开头先引述下QQ等级的算法:设当前等级为N,达到当前等级最少需要的活跃天数为D,当前活跃天数为Dc,升级剩余天数为Dr,则:从而推出:好了,引述完成,懒得写字了,贴出代码&…

Bugfree实用心得_转

转自:http://blog.csdn.net/benkaoya/article/details/8719257 本博下有许多实用技巧 1. 什么是问题跟踪系统 问题跟踪系统(Issue Tracking System)是专门用于记录、跟踪和管理各类问题的软件。 问题跟踪系统出现于上世纪80年代,…

【qxbt day1】 P2367 语文成绩

今天学了 差分********* 很明白 然后 配合着luogu上的题写一下吧 裸的差分 当时一直打暴力60分 交了十几次 今天才知道 查询修改什么的是差分 直接看题把 输入输出格式输入格式: 第一行有两个整数n,p,代表学生数与增加分数的次…

python会什么比c慢

众所周知,python执行速度比c慢。原因为何? 先来看下面这张图: python的传统运行执行模式:录入的源代码转换为字节码,之后字节码在python虚拟机中运行。代码自动被编译,之后再解释成机器码在CPU中执行。 补充…

多维动归第一题

https://www.luogu.org/problemnew/show/P1508 好了这题就是较为简单的坐标类DP(感觉),总之是一个二维的区域,需要一步一步地向可前进方向dp,而倒退过来,就是每一个地方取之前的地方里最多的一个进行选择&a…

Json字符串处理

2019独角兽企业重金招聘Python工程师标准>>> pom.xml <dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.7</version> </dependency> 编写GsonUtils类 // // Source c…

用脚本控制虚拟机

#############用脚本控制虚拟机给file.sh 一个权限chmod x file.sh转载于:https://blog.51cto.com/forever8/1863587

HDU 5288

//枚举因子&#xff0c;查找和i最近的左右是i因子的点即可。#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define LL long long using namespace std;const int MAX100010; const LL mod1e97; int l_next[10010];…

Git 初步学习

学习目标&#xff1a; 在linux 上安装Git 服务器 在windows 上安装 Git 客户端 创建Git仓库&#xff0c;git用户 在windows 中获取项目&#xff0c;对项目进行增删改查&#xff0c;更新到服务器 创建两个分支&#xff0c;进行分支修改和代码合并 1. 在linux上安装git服务器 使用…

CRTMPServer 在CentOS 64-bit下的编译(转)

CRTMPServer 在CentOS 64-bit下的编译 http://blog.csdn.net/qiuchangyong/article/details/52848942 一、Centos 用 wget 下载需要的软件 wget http://www.cmake.org/files/v2.8/cmake-2.8.6.tar.gz 二、安装 cmake tar zxvf cmake-2.8.4.tar.gzcd cmake-2.8.6./bootstrapgma…

HTML 学习笔记 day one

HTML学习笔记 day one Chapter one 网站开发基础 1.2网站的基本架构 网站的基本要素&#xff1a;内容&#xff0c;页面&#xff0c;超链接 动态网页和静态网页的区别在于&#xff1a;动态网页会自动更新&#xff0c;后缀名是.asp或者.aspx;而静态网页不会自动更新&#xff0c…

Jquery事件冒泡

事件冒泡 什么是事件冒泡 在一个对象上触发某类事件&#xff08;比如单击onclick事件&#xff09;&#xff0c;如果此对象定义了此事件的处理程序&#xff0c;那么此事件就会调用这个处理程序&#xff0c;如果没有定义此事件处理程序或者事件返回true&#xff0c;那么这个事件会…

WPF对某控件添加右键属性

代码创建右键属性 ContextMenu cm new ContextMenu();MenuItem mi new MenuItem();mi.Header "打开此文件所有文件夹";mi.Click mi_Click;cm.Items.Add(mi);lv.ContextMenu cm; 转载于:https://www.cnblogs.com/lunawzh/p/5986356.html

解决虚拟机 正在决定eht0 的ip信息失败 无链接-- 添加虚拟网卡

添加步骤&#xff1a;1、进入设备管理器 2、点下一步3、继续下一步4、继续往下走转载于:https://www.cnblogs.com/Yongzhouunknown/p/4802530.html

jquery元素节点操作

jquery元素节点操作 创建节点 var $div $(<div>); var $div2 $(<div>这是一个div元素</div>); 插入节点 1、append()和appendTo()&#xff1a;在现存元素的内部&#xff0c;从后面插入元素 var $span $(<span>这是一个span元素</span>); $(#d…

8位二进制补码表示整数的最小值是什么,最大值是什么

最大127,最小 -128补码表示的数,是没有正负0的,因此除了最高位的符号位以外,可以表示的数最大为 127,因此最大为 127 而因为 10000000,并不是表示为 -0 因此人家用 1000000表示 -128转载于:https://www.cnblogs.com/huenchao/p/5988288.html

使用 Arduino 和 LM35 温度传感器监测温度

上一篇玩儿了一下Arduino入门&#xff0c;这次再进一步&#xff0c;用一下LM35温度传感器来监测当前温度。LM35温度传感器已经在Arduino入门套件里包含了&#xff0c;就是那个有三个脚的小黑块儿。 我们先把这些东西连起来。把传感器查在面包板上&#xff0c;然后按照下面的示意…

快照是什么?揭秘存储快照的实现

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由许登博 发表于云社区专栏 原创声明&#xff1a;本文首发腾讯云云社区&#xff0c;未经允许&#xff0c;不得转载 前言 存储网络行业协会SNIA&#xff08;StorageNetworking Industry Association&…

MySQL 事物隔离级别

1.什么是事物&#xff1a; 访问并可能更新数据库的一个完整的程序执行单元&#xff08;UNIT&#xff09;2、事物必须满足ACID特性&#xff1a;A&#xff0c;atomic&#xff0c;原子性&#xff0c;要么都提交&#xff0c;要么都失败&#xff0c;不能一部分成功&#xff0c;一部分…

IIS_各种问题

IIS7中默认是已经加载了脚本映射处理。但今天装了个WIN7&#xff0c;装好IIS后却发现没有。于是手动去这安装&#xff0c;在添加html映射时提示&#xff1a;模块列表中必须要有IsapiModule或cgiModule 因为 IIS 7 采用了更安全的 web.config 管理机制&#xff0c;默认情况下会锁…