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多线程常用的几个关键字】相关文章:
java有几个关键字,Java多线程常用的几个关键字相关推荐
- java 多线程 关键字_Java多线程常用的几个关键字
Java多线程常用的几个关键字 本文是百分网小编搜索整理的关于Java多线程常用的几个关键字,供参考借鉴,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网! 一.同步(synchr ...
- Java 多线程(六) synchronized关键字详解
多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题. 同步机制可以使用synchronized关键字实现. 当synchroniz ...
- Java多线程常用面试题
一.什么是多线程? 线程是指程序在运行的过程中,能够执行程序代码的一个执行单元. Java语言中,线程有五种状态:新建.就绪.运行.阻塞及死亡. 二.线程与进程的区别? 进程是指一段正在执行的程序.而 ...
- java 有哪些关键字_JAVA的常用关键字有哪些?
JAVA的常用关键字有哪些? 发布时间:2020-05-25 21:46:00 来源:亿速云 阅读:133 作者:鸽子 下表是java中经常会用到的关键字: 一:用于定义访问权限修饰符的关键字: 1) ...
- Java常用的修饰符关键字
java中的关键字之修饰符关键字 关键字 修饰符型关键字 static关键字 static变量和static方法 static关键字的问题 能通过this访问静态成员变量吗? final关键字 fin ...
- JAVA多线程-常用JUC工具类及阻塞队列
工具类 CountDownLactch 简述 允许一个或多个线程等待,直到在其他线程中执行的一组操作完成,同步辅助. CountDownLatch 类用给定的计数初始化. await 方法阻塞,直到由 ...
- java如何写线程外部类_廖雪峰Java读书笔记(六)--多线程(或称并发)
1. 多线程基础 首先要明白一些概念: 进程:把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程. 线程:某些进程内部还需要同时执行多个子任务.例 ...
- Java岗:实打实掌握[Java多线程]和[并发编程]
概述 面试中,多线程和并发编程已经是必不可少的了,我经常看到此类问题,当时也简单了解过,什么继承Thread类,实现Runnable接口,这些都被说烂了,知道这些当然是远远不够的,于是这几天搜索相关资 ...
- java学习笔记(13) 第13章 - 常用类
第13 章常用类-目录 13.1 包装类 13.1.1 包装类的分类.包装类和基本数据的转换.案例演示.课堂测试 13.1.2 包装类型和String 类型的相互转换 13.1.3 Integer 类 ...
最新文章
- js复制功能的有效方法总结新
- 数据仓库与ODS的区别
- 入门 | 一文介绍机器学习中基本的数学符号
- linux下的mysql配置
- 云原生网络性能优化:service mesh 篇
- 误用检测_如何(不)在创业中误用人工智能
- Ubuntu系统中使用命令行读取u盘文件
- 常用遥感SIF和GPP数据集
- js 字符串格式化format函数扩展
- 大唐之路(4)一号店入驻要求
- Urlrewrite(url地址重写)和UrlRewriteFilter
- unity中实现ue眼球的渲染
- 2019华为实习面经
- vue 解决路由重复点击报错
- 关于安装Ubuntu20.04重启后反复进入bios界面
- adb查看app接口信息
- 30岁的java程序员_30岁零基础转行java程序员怎么样?
- python心形曲线和马鞍面_MATLAB编程:在同一平面的两个窗口分别画出心形线和马鞍面...
- [Python] Python基础⑵
- python根据f(x)绘图(二维)