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.pswp.cn/news/397524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397524.shtml
英文地址,請注明出處:http://en.pswp.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;默認情況下會鎖…