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

Java synchronize線程安全測(cè)試

 更新時(shí)間:2020年04月14日 15:41:48   作者:時(shí)光spring  
這篇文章主要介紹了Java synchronize線程安全測(cè)試,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

線程的運(yùn)行是與當(dāng)前CPU的資源調(diào)度與時(shí)間片是有關(guān)系的,當(dāng)一個(gè)線程中的執(zhí)行到某一部分方法的時(shí)候輪到另外一個(gè)線程來執(zhí)行相應(yīng)的代碼,所以還沒有等到第一個(gè)線程執(zhí)行完那么CPU有切換到另外一個(gè)線程來運(yùn)行其相應(yīng)的代碼,所以這個(gè)時(shí)候假如操作公共的數(shù)據(jù)部分就會(huì)出現(xiàn)錯(cuò)誤

為了解決這個(gè)問題,可以使用 synchronized 同步代碼塊來對(duì)公共部分進(jìn)行同步操作

在用synchronize關(guān)鍵字修飾同步代碼塊時(shí),運(yùn)行代碼發(fā)現(xiàn)不能交替賣票。 以下是初始代碼

package com.itheima.Test;

public class Test1a {

  public static void main(String[] args) {
    Ticket1a t1=new Ticket1a();
    new Thread(t1,"A").start();
    new Thread(t1,"B").start();
    new Thread(t1,"C").start();
    
  }

}
class Ticket1a implements Runnable{
   int ticket=100;
  @Override
  public void run() {
    synchronized (Ticket1a.class) {          
    while (true) {
      if (ticket<=0) {
        break;
      }
      try {
        Thread.sleep(20);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
        System.out.println(Thread.currentThread().getName()+" sold  "+(ticket--));
    }
    }
  }
}

運(yùn)行結(jié)果:

A sold  100
A sold  99
A sold  98
A sold  97
A sold  96
A sold  95
A sold  94
A sold  93
A sold  92
A sold  91
.
.
.
A sold  10
A sold  9
A sold  8
A sold  7
A sold  6
A sold  5
A sold  4
A sold  3
A sold  2
A sold  1

雖然解決了線程的安全問題,但是不能實(shí)現(xiàn)三個(gè)窗口交替賣票。后來仔細(xì)一看,是synchronize關(guān)鍵字修飾的代碼塊位置不對(duì),相當(dāng)于修飾了同步方法。

更改后:

@Override
  public void run() {
    while (true) {
        synchronized (Ticket1a.class) {
      if (ticket<=0) {
        break;
      }
      try {
        Thread.sleep(20);
      } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
        System.out.println(Thread.currentThread().getName()+" sold  "+(ticket--));
      }
    }
  }

這樣就完成了線程安全的小測(cè)試。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java生成二維碼的兩種實(shí)現(xiàn)方式(基于Spring?Boot)

    Java生成二維碼的兩種實(shí)現(xiàn)方式(基于Spring?Boot)

    這篇文章主要給大家介紹了關(guān)于Java生成二維碼的兩種實(shí)現(xiàn)方式,文中的代碼基于Spring?Boot,本文基于JAVA環(huán)境,以SpringBoot框架為基礎(chǔ)開發(fā),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • springboot如何配置定時(shí)任務(wù)

    springboot如何配置定時(shí)任務(wù)

    這篇文章主要介紹了springboot如何配置定時(shí)任務(wù),幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-11-11
  • SpringBoot管理RabbitMQ中的Channel詳解

    SpringBoot管理RabbitMQ中的Channel詳解

    這篇文章主要介紹了SpringBoot管理RabbitMQ中的Channel詳解,channel僅存在于connection的上下文中,而不會(huì)單獨(dú)存在,當(dāng)channel關(guān)閉時(shí),其上的所有channel也會(huì)關(guān)閉,需要的朋友可以參考下
    2023-08-08
  • Java快速排序案例講解

    Java快速排序案例講解

    這篇文章主要介紹了Java快速排序案例講解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • mybatis攔截器及不生效的解決方法

    mybatis攔截器及不生效的解決方法

    本文主要介紹了mybatis攔截器及不生效的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解

    Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解

    這篇文章主要介紹了Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解,Exchanger是一個(gè)用于線程間協(xié)作的工具類,Exchanger用于進(jìn)行線程間的數(shù)據(jù)交 換,它提供一個(gè)同步點(diǎn),在這個(gè)同步點(diǎn),兩個(gè)線程可以交換彼此的數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • Java線程的聯(lián)合用法實(shí)例分析

    Java線程的聯(lián)合用法實(shí)例分析

    這篇文章主要介紹了Java線程的聯(lián)合用法,結(jié)合實(shí)例形式分析了java線程聯(lián)合的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Java異常處理中的各種細(xì)節(jié)匯總

    Java異常處理中的各種細(xì)節(jié)匯總

    這篇文章主要給大家介紹了關(guān)于Java異常處理中的各種細(xì)節(jié)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Java程序圖形用戶界面設(shè)計(jì)之標(biāo)簽組件

    Java程序圖形用戶界面設(shè)計(jì)之標(biāo)簽組件

    圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來說在視覺上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的標(biāo)簽組件部分
    2022-02-02
  • springboot結(jié)合mybatis-plus基于session模擬短信注冊(cè)功能

    springboot結(jié)合mybatis-plus基于session模擬短信注冊(cè)功能

    本文主要介紹了springboot結(jié)合mybatis-plus基于session模擬短信注冊(cè)功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11

最新評(píng)論