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多线程常用的几个关键字相关推荐

  1. java 多线程 关键字_Java多线程常用的几个关键字

    Java多线程常用的几个关键字 本文是百分网小编搜索整理的关于Java多线程常用的几个关键字,供参考借鉴,希望对大家有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网! 一.同步(synchr ...

  2. Java 多线程(六) synchronized关键字详解

    多线程的同步机制对资源进行加锁,使得在同一个时间,只有一个线程可以进行操作,同步用以解决多个线程同时访问时可能出现的问题. 同步机制可以使用synchronized关键字实现. 当synchroniz ...

  3. Java多线程常用面试题

    一.什么是多线程? 线程是指程序在运行的过程中,能够执行程序代码的一个执行单元. Java语言中,线程有五种状态:新建.就绪.运行.阻塞及死亡. 二.线程与进程的区别? 进程是指一段正在执行的程序.而 ...

  4. java 有哪些关键字_JAVA的常用关键字有哪些?

    JAVA的常用关键字有哪些? 发布时间:2020-05-25 21:46:00 来源:亿速云 阅读:133 作者:鸽子 下表是java中经常会用到的关键字: 一:用于定义访问权限修饰符的关键字: 1) ...

  5. Java常用的修饰符关键字

    java中的关键字之修饰符关键字 关键字 修饰符型关键字 static关键字 static变量和static方法 static关键字的问题 能通过this访问静态成员变量吗? final关键字 fin ...

  6. JAVA多线程-常用JUC工具类及阻塞队列

    工具类 CountDownLactch 简述 允许一个或多个线程等待,直到在其他线程中执行的一组操作完成,同步辅助. CountDownLatch 类用给定的计数初始化. await 方法阻塞,直到由 ...

  7. java如何写线程外部类_廖雪峰Java读书笔记(六)--多线程(或称并发)

    1. 多线程基础 首先要明白一些概念: 进程:把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程. 线程:某些进程内部还需要同时执行多个子任务.例 ...

  8. Java岗:实打实掌握[Java多线程]和[并发编程]

    概述 面试中,多线程和并发编程已经是必不可少的了,我经常看到此类问题,当时也简单了解过,什么继承Thread类,实现Runnable接口,这些都被说烂了,知道这些当然是远远不够的,于是这几天搜索相关资 ...

  9. java学习笔记(13) 第13章 - 常用类

    第13 章常用类-目录 13.1 包装类 13.1.1 包装类的分类.包装类和基本数据的转换.案例演示.课堂测试 13.1.2 包装类型和String 类型的相互转换 13.1.3 Integer 类 ...

最新文章

  1. js复制功能的有效方法总结新
  2. 数据仓库与ODS的区别
  3. 入门 | 一文介绍机器学习中基本的数学符号
  4. linux下的mysql配置
  5. 云原生网络性能优化:service mesh 篇
  6. 误用检测_如何(不)在创业中误用人工智能
  7. Ubuntu系统中使用命令行读取u盘文件
  8. 常用遥感SIF和GPP数据集
  9. js 字符串格式化format函数扩展
  10. 大唐之路(4)一号店入驻要求
  11. Urlrewrite(url地址重写)和UrlRewriteFilter
  12. unity中实现ue眼球的渲染
  13. 2019华为实习面经
  14. vue 解决路由重复点击报错
  15. 关于安装Ubuntu20.04重启后反复进入bios界面
  16. adb查看app接口信息
  17. 30岁的java程序员_30岁零基础转行java程序员怎么样?
  18. python心形曲线和马鞍面_MATLAB编程:在同一平面的两个窗口分别画出心形线和马鞍面...
  19. [Python] Python基础⑵
  20. python根据f(x)绘图(二维)

热门文章

  1. 《Cocos2D权威指南》——3.9 本章小结
  2. 浅谈PHP+Access数据库的连接 注意要点
  3. leetcode------Word Search
  4. unity中脚本编辑器UnIDE
  5. Linux下Socket网络编程
  6. robo 3t连接_使用robo 3t studio 3t连接到地图集
  7. leetcode1144. 递减元素使数组呈锯齿状
  8. 参加开发竞赛遇到的问题【总结】
  9. Java数据结构--HashTable(拉链法)
  10. python selenium ---键盘事件