久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術(shù)文章
文章詳情頁

Java synchronize線程安全測試

瀏覽:157日期:2022-09-02 18:31:22

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

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

在用synchronize關(guān)鍵字修飾同步代碼塊時,運(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 blocke.printStackTrace(); }System.out.println(Thread.currentThread().getName()+' sold '+(ticket--)); } } }}

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

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

雖然解決了線程的安全問題,但是不能實(shí)現(xiàn)三個窗口交替賣票。后來仔細(xì)一看,是synchronize關(guān)鍵字修飾的代碼塊位置不對,相當(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 blocke.printStackTrace(); }System.out.println(Thread.currentThread().getName()+' sold '+(ticket--)); } } }

這樣就完成了線程安全的小測試。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 缙云县| 星座| 正宁县| 故城县| 蕲春县| 车致| 石嘴山市| 灵台县| 冀州市| 遵义市| 永新县| 乌鲁木齐县| 广饶县| 苍梧县| 保康县| 英德市| 德令哈市| 正蓝旗| 屯门区| 兴仁县| 新巴尔虎右旗| 高邮市| 屯留县| 明光市| 南岸区| 聂荣县| 临猗县| 田东县| 无极县| 翁牛特旗| 讷河市| 苏尼特左旗| 桂平市| 平和县| 绍兴市| 将乐县| 永新县| 德钦县| 大丰市| 江北区| 珲春市|