锘??xml version="1.0" encoding="utf-8" standalone="yes"?>日本韩国精品一区二区在线观看,亚洲女人视频,在线播放网站http://www.aygfsteel.com/qzzf1987/zh-cnThu, 19 Jun 2025 15:51:51 GMTThu, 19 Jun 2025 15:51:51 GMT60class鏂囦歡涔嬪父閲忔睜鍒嗘瀽http://www.aygfsteel.com/qzzf1987/archive/2010/12/07/340007.htmlQZZFQZZFTue, 07 Dec 2010 09:51:00 GMThttp://www.aygfsteel.com/qzzf1987/archive/2010/12/07/340007.htmlhttp://www.aygfsteel.com/qzzf1987/comments/340007.htmlhttp://www.aygfsteel.com/qzzf1987/archive/2010/12/07/340007.html#Feedback0http://www.aygfsteel.com/qzzf1987/comments/commentRss/340007.htmlhttp://www.aygfsteel.com/qzzf1987/services/trackbacks/340007.html闃呰鍏ㄦ枃

QZZF 2010-12-07 17:51 鍙戣〃璇勮
]]>
Volatilehttp://www.aygfsteel.com/qzzf1987/archive/2010/07/15/326201.htmlQZZFQZZFThu, 15 Jul 2010 08:02:00 GMThttp://www.aygfsteel.com/qzzf1987/archive/2010/07/15/326201.htmlvolatile:鍏鋒湁 synchronized 鐨勫彲瑙佹х壒鎬э紝浣嗘槸涓嶅叿澶囧師瀛愮壒鎬?榪欏氨鏄綰跨▼鑳? 澶熻嚜鍔ㄥ彂鐜?volatile 鍙橀噺鐨勬渶鏂板?/span>.

浣跨敤volatile鍘熷垯:

瀵瑰彉閲忕殑鍐欐搷浣滀笉渚濊禆浜庡綋鍓嶅箋?/span>

銆銆璇ュ彉閲忔病鏈夊寘鍚湪鍏鋒湁鍏朵粬鍙橀噺鐨勪笉鍙樺紡涓?/span>


package
 zhang.feng.concurrent.atomic;

public class VolatileTest {
    
    
private String str="";
    
    
public String getStr() {
        
return str;
    }
    
public void setStr(String str) {
        
this.str = str;
    }
    
private void doit(){
        
        
new Thread(new Runnable(){
            
public void run() {
                setStr(
"娌℃湁鍐欏叆涓誨瓨?shù)?/span>");
                System.out.println(
"====");
            }
        },
"THREAD_ONE").start();
        
new Thread(new Runnable(){
            
public void run() {
                String str
=getStr();
                System.out.println(str);
            }
        },
"THREAD_TWO").start();
    }
    
    
public static void main(String[] args){
        VolatileTest vt
=new VolatileTest();
        vt.doit();
    }
}

涓婇潰鐨勪緥瀛?濡傛灉涓嶄嬌鐢╲olatile鍙橀噺,鍙兘鍑虹幇鐨勬儏鍐墊槸(鍑虹幇鍑犵巼寰堝皬),THREAD_ONE綰跨▼鍦╯etStr()鍚?
THREAD_TWO鎵ц浜?jiǎn)getStr(),浣嗘槸鐢變簬騫舵病鏈夊皢鏁版嵁鍐欏叆涓誨瓨?shù)?鑰屾鏃秅etStr()鑾峰緱鐨勬暟鎹皢鏄繃鏃舵暟鎹?

瑙e喅鐨勬柟寮?閫氳繃lock(寮閿姣旇緝澶?,浣跨敤volatile鍙橀噺(濡備笂).




姝g‘浣跨敤 volatile 鐨勬ā寮?/span>
1.鐘舵佹爣蹇?br />
volatile boolean shutdownRequested;



public void shutdown() { shutdownRequested = true; }

public void doWork() { 
    
while (!shutdownRequested) { 
        
// do stuff
    }
}
鍙兘鍦ㄥ彟涓涓嚎紼嬩腑璋冪敤shutdown(),閭d箞浣跨敤volatile鍙互淇濊瘉shutdownRequested鍙鎬?鎵浠ヤ笉闇瑕佷嬌鐢╨ock鏉ュ疄鐜版暟鎹悓姝?
璇ユā寮忕壒寰?鍙湁涓縐嶇姸鎬佺殑杞崲.

2.
涓嬈℃у畨鍏ㄥ彂甯?br />
public class BackgroundFloobleLoader {
    
public volatile Flooble theFlooble;

    
public void initInBackground() {
        
// do lots of stuff
        theFlooble = new Flooble();  // this is the only write to theFlooble
    }
}

public class SomeOtherClass {
    
public void doWork() {
        
while (true) { 
            
// do some stuff
            
// use the Flooble, but only if it is ready
            if (floobleLoader.theFlooble != null
                doSomething(floobleLoader.theFlooble);
        }
    }
}
鍦ㄥ鏋?span style="color: #000000;">initInBackground(鍐欏叆)鍜?/span>doWork(璇誨彇)鍦ㄤ笉鍚岀嚎紼嬪悓鏃舵墽琛屾椂,閭d箞鍙兘鑾峰緱鐨勬洿鏂板悗鐨凢looble瀵硅薄涔熷彲鑳芥槸鏈洿鏂板墠鐨?鑰屾槸鐢╲olatile鍙互淇濊瘉鏄鍙栧埌鏇存柊鍚庣殑瀵硅薄.

璇ユā寮忕殑涓涓繀瑕佹潯浠舵槸錛氳鍙戝竷鐨勫璞″繀欏繪槸綰跨▼瀹夊叏鐨勶紝鎴栬呮槸鏈夋晥鐨勪笉鍙彉瀵硅薄錛堟湁鏁堜笉鍙彉鎰忓懗鐫瀵硅薄鐨勭姸鎬佸湪鍙戝竷涔嬪悗姘歌繙涓嶄細(xì)琚慨鏀癸級(jí)銆?br />


3.
鐙珛瑙傚療
public class UserManager {
    
public volatile String lastUser;

    
public boolean authenticate(String user, String password) {
        
boolean valid = passwordIsValid(user, password);
        
if (valid) {
            User u 
= new User();
            activeUsers.add(u);
            lastUser 
= user;
        }
        
return valid;
    }
}

璇ユā寮忓彲浠ョ敤浜庢敹闆嗘渶榪戜竴嬈$櫥褰曚俊鎭?騫舵彁浜ゅ叾浠栧簲鐢ㄥ鐞?

4.“volatile bean” 妯″紡
@ThreadSafe
public class Person {
    
private volatile String firstName;
    
private volatile String lastName;
    
private volatile int age;

    
public String getFirstName() { return firstName; }
    
public String getLastName() { return lastName; }
    
public int getAge() { return age; }

    
public void setFirstName(String firstName) { 
        
this.firstName = firstName;
    }

    
public void setLastName(String lastName) { 
        
this.lastName = lastName;
    }

    
public void setAge(int age) { 
        
this.age = age;
    }
}

緇撴潫璇?/span>
涓庨攣鐩告瘮錛孷olatile 鍙橀噺鏄竴縐嶉潪甯哥畝鍗曚絾鍚屾椂鍙堥潪甯歌剢寮辯殑鍚屾鏈哄埗錛屽畠鍦ㄦ煇浜涙儏鍐典笅灝嗘彁渚涗紭?shù)簬閿佺殑鎬ц兘鍜屼幾緙╂с傚鏋滀弗鏍奸伒寰? volatile 鐨勪嬌鐢ㄦ潯浠?鈥斺?鍗沖彉閲忕湡姝g嫭绔嬩簬鍏朵粬鍙橀噺鍜岃嚜宸變互鍓嶇殑鍊?鈥斺?鍦ㄦ煇浜涙儏鍐典笅鍙互浣跨敤 volatile 浠f浛 synchronized 鏉ョ畝鍖栦唬鐮併傜劧鑰岋紝浣跨敤 volatile 鐨勪唬鐮佸線寰姣斾嬌鐢ㄩ攣鐨勪唬鐮佹洿鍔犲鏄撳嚭閿欍傛湰鏂囦粙緇嶇殑妯″紡娑電洊浜?jiǎn)鍙互鋴社?volatile 浠f浛 synchronized 鐨勬渶甯歌鐨勪竴浜涚敤渚嬨傞伒寰繖浜涙ā寮忥紙娉ㄦ剰浣跨敤鏃朵笉瑕佽秴榪囧悇鑷殑闄愬埗錛夊彲浠ュ府鍔╂?zhèn)ㄥ畨鍏ㄥ湴瀹炵幇澶у鏁扮敤渚嬪Q屼嬌鐢?volatile 鍙橀噺鑾峰緱鏇翠匠鎬ц兘銆?


QZZF 2010-07-15 16:02 鍙戣〃璇勮
]]>
綾?CountDownLatchhttp://www.aygfsteel.com/qzzf1987/archive/2010/07/14/CountDownLatch.htmlQZZFQZZFWed, 14 Jul 2010 08:04:00 GMThttp://www.aygfsteel.com/qzzf1987/archive/2010/07/14/CountDownLatch.html浣跨敤CountDownLatch鍙互淇濊瘉鎸囧畾綰跨▼鏁扮殑欏哄埄瀹屾垚,濡備笅:

public
 class CountDownLatchTest {
    
static int N=5;//鎸囧畾闇瑕佺瓑寰呭畬鎴愮殑綰跨▼鏁?/span>
    
    
static CountDownLatch cdl=new CountDownLatch(N);
    
    
static List list=new ArrayList();
    
    
public static void main(String[] args) {
        for(int i=0;i<N;i++){
            
new Thread(new countDownLatchRunnable(i),"Thread_"+i).start();
        }
        
try {
            cdl.await();
//絳夊緟鍦╟dl.countDown()涔嬪墠榪涜鐨勬搷浣滈兘欏哄埄瀹屾垚
        } catch (InterruptedException e) {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(
"LIST_1 size["+list.size()+"]");//甯屾湜鑾峰緱鏄痵ize>=5
    }
    
    
static class countDownLatchRunnable implements Runnable{
        
int num;
        
        countDownLatchRunnable(
int num){
            
this.num=num;
        }
        
        @Override
        
public void run() {
            doWork();
//鑰屽湪cdl.countDown()涔嬪墠鐨勬搷浣?鍒欏湪璋冪敤await()鏃?鍒欎細(xì)絳夊緟璇ラ儴鍒嗘搷浣滃畬鎴?/span>
            cdl.countDown();
            list.add(num);
//濡傛灉鍦╟dl.countDown()鍚庢坊鍔犳搷浣?閭d箞鍦╟dl.await()澶勫茍涓嶄細(xì)絳夊緟璇ラ儴鍒嗘搷浣滃畬鎴?鑰屾槸浼?xì)鏈夌珵浜?/span>
        }
        
private void doWork(){
            
//鎵ц鍏朵粬宸ヤ綔
            list.add(num);
        }
    }
}

濡傛灉涓嶄嬌鐢?/span>CountDownLatch,閭d箞鍦╩ain綰跨▼鍜屽叾浠栫嚎紼嬮兘鏄浜庣珵浜夊叧緋?鏈鍚庣殑size緇撴灉鍙兘涔熸槸闅忔満瀛樺湪鐨?br />



QZZF 2010-07-14 16:04 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 武胜县| 东源县| 门源| 凤庆县| 和政县| 确山县| 木里| 嘉禾县| 时尚| 莱西市| 陇川县| 永靖县| 浦城县| 平阴县| 张家界市| 黄石市| 湖北省| 泗阳县| 通化县| 阳泉市| 东安县| 钦州市| 上饶市| 东港市| 香河县| 腾冲县| 南雄市| 扎兰屯市| 合作市| 溧阳市| 靖州| 芜湖市| 泸西县| 交城县| 衡阳县| 格尔木市| 承德市| 寿宁县| 社旗县| 浦北县| 株洲县|