国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

編寫高效的線程安全類

2019-11-17 06:06:21
字體:
來源:轉載
供稿:網友

java 編程語言為編寫多線程應用程序提供強大的語言支持。但是,編寫有用的、沒有錯誤的多線程程序仍然比較困難。本文試圖概述幾種方法,程序員可用這幾種方法來創建高效的線程安全類。

并發性

只有當要解決的問題需要一定程度的并發性時,程序員才會從多線程應用程序中受益。例如,假如打印隊列應用程序僅支持一臺打印機和一臺客戶機,則不應該將它編寫為多線程的。一般說來,包含并發性的編碼問題通常都包含一些可以并發執行的操作,同時也包含一些不可并發執行的操作。例如,為多個客戶機和一個打印機提供服務的打印隊列可以支持對打印的并發請求,但向打印機的輸出必須是串行形式的。多線程實現還可以改善交互式應用程序的響應時間。

Synchronized 要害字

雖然多線程應用程序中的大多數操作都可以并行進行,但也有某些操作(如更新全局標志或處理共享文件)不能并行進行。在這些情況下,必須獲得一個鎖來防止其他線程在執行此操作的線程完成之前訪問同一個方法。在 Java 程序中,這個鎖是通過 synchronized 要害字提供的。清單 1 說明了它的用法。

清單 1. 使用 synchronized 要害字來獲取鎖

public class MaxScore {
    int max;
    public MaxScore() {
        max = 0;
    }

    public synchronized void currentScore(int s) {
        if(s> max) {
            max = s;
        }
    }

    public int max() {
        return max;
    }
}

這里,兩個線程不能同時調用 currentScore() 方法;當一個線程工作時,另一個線程必須阻塞。但是,可以有任意數量的線程同時通過 max() 方法訪問最大值,因為 max() 不是同步方法,因此它與鎖定無關。

試考慮在 MaxScore 類中添加另一個方法的影響,該方法的實現如清單 2 所示。

清單 2. 添加另一個方法

public synchronized void reset() {
        max = 0;
    }

這個方法(當被訪問時)不僅將阻塞 reset() 方法的其他調用,而且也將阻塞 MaxScore 類的同一個實例中的 currentScore() 方法,因為這兩個方法都訪問同一個鎖。假如兩個方法必須不彼此阻塞,則程序員必須在更低的級別使用同步。清單 3 是另一種情況,其中兩個同步的方法可能需要彼此獨立。

清單 3. 兩個獨立的同步方法

import java.util.*;

public class Jury {
    Vector members;
    Vector alternates;

    public Jury() {
        members = new Vector(12, 1);
        alternates = new Vector(12, 1);
    }

    public synchronized void addMember(String name) {
        members.add(name);
    }

    public synchronized void addAlt(String name) {
        alternates.add(name);
    }

    public synchronized Vector all() {
        Vector retval = new Vector(members);
        retval.addAll(alternates);
        return retval;
    }
}



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 达孜县| 石柱| 师宗县| 辽阳县| 云林县| 塘沽区| 莱州市| 新宁县| 黑河市| 留坝县| 方城县| 吴桥县| 武鸣县| 福海县| 南宫市| 万安县| 峨边| 罗甸县| 肇庆市| 揭阳市| 日喀则市| 房产| 仙游县| 新竹市| 松潘县| 宁波市| 盘山县| 苏尼特左旗| 昌图县| 崇阳县| 华宁县| 广昌县| 皋兰县| 榆树市| 辽阳市| 丹凤县| 锡林浩特市| 祁东县| 乌海市| 邹城市| 宾川县|