欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入同步訪問(wèn)共享的可變數(shù)據(jù)分析

 更新時(shí)間:2013年06月04日 17:58:47   作者:  
本篇文章是對(duì)同步訪問(wèn)共享的可變數(shù)據(jù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
如果對(duì)共享的可變數(shù)據(jù)的訪問(wèn)不能同步,其后果非常可怕,即使這個(gè)變量是原子可讀寫的。
下面考慮一個(gè)線程同步方面的問(wèn)題。對(duì)于線程同步,Java類庫(kù)提供了Thread.stop的方法,但是這個(gè)方法并不值得提倡,因?yàn)樗举|(zhì)上是不安全的。使用輪詢(Polling)的方式會(huì)更好,例如下面這段程序。
復(fù)制代碼 代碼如下:

import java.util.concurrent.TimeUnit;
public class StopThread {
 /**
  * @param args
  */

 private static boolean stopRequested;

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

  Thread backgroundThread = new Thread(new Runnable() {

   @Override
   public void run() {

    int i = 0;
    while(!stopRequested){
     i++;
     System.out.println(i);
    }
   }
  });
  backgroundThread.start();
  TimeUnit.SECONDS.sleep(1);
  stopRequested = true;
 }
}

你可能會(huì)認(rèn)為這個(gè)程序在運(yùn)行大約一秒后,由于主線程把stopRequested設(shè)成了true,使得后臺(tái)的新線程停止,其實(shí)不然,因?yàn)楹笈_(tái)線程看不到這個(gè)值的變化,所以會(huì)一直無(wú)線循環(huán)下去,這就是沒(méi)有對(duì)數(shù)據(jù)進(jìn)行同步的后果。因此讓我們用同步的方式來(lái)實(shí)現(xiàn)這個(gè)任務(wù)。
復(fù)制代碼 代碼如下:

import java.util.concurrent.TimeUnit;
public class StopThread {
 /**
  * @param args
  */

 private static boolean stopRequested;

 private static synchronized void requestStop(){
  stopRequested = true;
 }
 private static synchronized boolean stopRequested(){
  return stopRequested;
 }

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

  Thread backgroundThread = new Thread(new Runnable() {

   @Override
   public void run() {

    int i = 0;
    while(!stopRequested()){
     i++;
     System.out.println(i);
    }
   }
  });
  backgroundThread.start();
  TimeUnit.SECONDS.sleep(1);
  requestStop();
 }
}

這樣就實(shí)現(xiàn)了數(shù)據(jù)的同步,值得注意的是,寫方法(requestStop)和讀方法(stopRequested)都需要被同步,否則仍然不是真正意義上的同步。
另外,我們可以使用volatile這個(gè)變量修飾符來(lái)更加簡(jiǎn)單地完成同步任務(wù)。
復(fù)制代碼 代碼如下:

import java.util.concurrent.TimeUnit;
public class StopThread {
 /**
  * @param args
  */

 private static volatile boolean stopRequested;

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

  Thread backgroundThread = new Thread(new Runnable() {

   @Override
   public void run() {

    int i = 0;
    while(!stopRequested){
     i++;
     System.out.println(i);
    }
   }
  });
  backgroundThread.start();
  TimeUnit.SECONDS.sleep(1);
  stopRequested = true;
 }
}

相關(guān)文章

  • Java文件、文件夾權(quán)限修改的兩種方法

    Java文件、文件夾權(quán)限修改的兩種方法

    這篇文章主要給大家介紹了關(guān)于Java文件、文件夾權(quán)限修改的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Java實(shí)現(xiàn)微信支付的項(xiàng)目實(shí)踐

    Java實(shí)現(xiàn)微信支付的項(xiàng)目實(shí)踐

    最近的一個(gè)項(xiàng)目中涉及到了支付業(yè)務(wù),其中用到了微信支付和支付寶支付,本文就來(lái)介紹一下Java實(shí)現(xiàn)微信支付的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • JVM中四種GC算法案例詳解

    JVM中四種GC算法案例詳解

    這篇文章主要介紹了JVM中四種GC算法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • java字符串所有操作方法匯總

    java字符串所有操作方法匯總

    這篇文章主要介紹了java字符串所有操作方法匯總,需要的朋友可以參考下,在實(shí)際的編程中,我們經(jīng)常需要對(duì)字符串進(jìn)行各種操作,例如連接、截取、替換等,本文將按類別介紹一些Java字符串的常用方法,幫助讀者更好地理解和使用
    2023-11-11
  • 一文了解Seata的實(shí)現(xiàn)原理

    一文了解Seata的實(shí)現(xiàn)原理

    隨著業(yè)務(wù)發(fā)展,單體系統(tǒng)逐漸無(wú)法滿足業(yè)務(wù)的需求,分布式架構(gòu)逐漸成為大型互聯(lián)網(wǎng)平臺(tái)首選。伴隨而來(lái)的問(wèn)題是,本地事務(wù)方案已經(jīng)無(wú)法滿足,分布式事務(wù)相關(guān)規(guī)范和框架應(yīng)運(yùn)而生。本文主要介紹Seata的實(shí)現(xiàn)原理
    2021-06-06
  • 基于Java開(kāi)發(fā)實(shí)現(xiàn)ATM系統(tǒng)

    基于Java開(kāi)發(fā)實(shí)現(xiàn)ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于Java開(kāi)發(fā)實(shí)現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Spring中IOC和AOP的核心組成架構(gòu)詳解

    Spring中IOC和AOP的核心組成架構(gòu)詳解

    這篇文章主要介紹了Spring中IOC和AOP的核心組成架構(gòu)詳解,本文是對(duì)Spring的2大核心功能——IoC和AOP 的總結(jié)提煉,并增加了環(huán)境profile和條件化bean的內(nèi)容,篇幅較短,更像是一個(gè)大綱,或者思維導(dǎo)圖,需要的朋友可以參考下
    2023-08-08
  • shiro之INI配置詳解

    shiro之INI配置詳解

    這篇文章主要為大家詳細(xì)介紹了shiro之INI配置的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 使用@Value值注入及配置文件組件掃描

    使用@Value值注入及配置文件組件掃描

    這篇文章主要介紹了使用@Value值注入及配置文件組件掃描方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解決mapper接口無(wú)法映射mapper.xml的問(wèn)題

    解決mapper接口無(wú)法映射mapper.xml的問(wèn)題

    這篇文章主要介紹了解決mapper接口無(wú)法映射mapper.xml的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論