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

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

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

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;
 }
}

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

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();
 }
}

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

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;
 }
}

相關文章

  • Java文件、文件夾權限修改的兩種方法

    Java文件、文件夾權限修改的兩種方法

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

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

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

    JVM中四種GC算法案例詳解

    這篇文章主要介紹了JVM中四種GC算法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • java字符串所有操作方法匯總

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

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

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

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

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

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

    Spring中IOC和AOP的核心組成架構詳解

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

    shiro之INI配置詳解

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

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

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

    解決mapper接口無法映射mapper.xml的問題

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

最新評論