熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

多線程成共享數據方式

2013-11-23 19:47:11  來源: Java高級技術 
    public class MultiThreadShareData {
   
    /**
   
    * 多線程成共享數據 面試題 第一種買票系統 方法
   
    * 方式:如果每個線程執行相同的代碼可以使用同一個Runable對象這個Runable對象中有那個共享的數據
   
    */
   
    public static void main(String[] args) {
   
    ShareData data = new ShareData()
   
    new Thread(data)start()
   
    new Thread(data)start()
   
    }
   
    }
   
    class ShareData implements Runnable{
   
    private int count =;
   
    @Override
   
    public void run() {
   
    while(true){
   
    count ;
   
    }
   
    }
   
    }
   
    ××××××××××××××××××××××××××××××××××××××××××××
   
    public class MultiThreadShareData {
   
    /**
   
    * 多線程成共享數據(共享數據是指同一個對象)
   
    * 面試題
   
    * 第二種方式如果比如多個個線程執行代碼不同比如以下示例一會加一會減測需要個Runable 對象來操作
   
    設計個線程其中個線程每次對j增加另外兩個線程對J 每次減少寫出程序
   
    */
   
    public static void main(String[] args) {
   
    //共同對象
   
    final ShareData data = new ShareData()
   
    /* 加 j */
   
    new Thread(new Runnable(){//內部類
   
    @Override
   
    public void run() {
   
    datasub()
   
    }
   
    })start()
   
    /* 減 j  */
   
    new Thread(new Runnable(){
   
    @Override
   
    public void run() {
   
    dataadd()
   
    }
   
    })start()
   
    }
   
    }
   
    class ShareData {
   
    private int j=;
   
    public synchronized void add(){
   
    j++;
   
    }
   
    public synchronized void sub(){
   
    j;
   
    }
   
    }
   
    demo: 網上搜索的答案
   
    /**
   
    * 第二種方式如果比如多個個線程執行代碼不同比如以下示例一會加一會減測需要 個Runable 對象來操作
   
    設計個線程其中個線程每次對j增加另外兩個線程對J 每次減少寫出程序
   
    * @author Administrator
   
    * 這裡個Runnable都是內部類可以訪問外部類的成員變量 這裡是 j 通過內部類調用外部類方法 J++ J
   
    */
   
    public class ThreadTest {
   
    private int j;
   
    public static void main(String args[]) {
   
    ThreadTest tt = new ThreadTest()
   
    //必須通過外部類的對象才能實例化內部類
   
    Inc inc = ttnew Inc()
   
    Dec dec = ttnew Dec()
   
    for (int i = ; i < ; i++) {
   
    Thread t = new Thread(inc)
   
    tstart()
   
    t = new Thread(dec)
   
    tstart()
   
    }
   
    }
   
    private synchronized void inc() {
   
    j++;
   
    Systemoutprintln(ThreadcurrentThread()getName() + inc: + j)
   
    }
   
    private synchronized void dec() {
   
    j;
   
    Systemoutprintln(ThreadcurrentThread()getName() + dec: + j)
   
    }
   
    //內部類 增
   
    class Inc implements Runnable {
   
    // 可以操作外部類的變量 j
   
    public void run() {
   
    for (int i = ; i < ; i++) {
   
    inc()
   
    }
   
    }
   
    }
   
    //內部類 減
   
    class Dec implements Runnable {
   
    // 可以操作外部類的變量 j
   
    public void run() {
   
    for (int i = ; i < ; i++) {
   
    dec()
   
    }
   
    }
   
    }
   
    }
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27451.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.