07-多个线程之间共享数据的方式探讨
package cn.itcast.demo.thread; public class MultiThreadShareData { public static void main(String[] args) { // 共享的数据 ShareData data = new ShareData(); for (int i=0; i<2; i++) { // 线程1 new Thread(new MyRunnableIncr(data)).start(); // 线程2 new Thread(new MyRunnableDecr(data)).start(); } } } // 线程数据自增代理类 class MyRunnableIncr implements Runnable { private ShareData data; public MyRunnableIncr(ShareData data) { this.data = data; } @Override public void run() { data.increment(); } public MyRunnableIncr() {} } //线程数据自减代理类 class MyRunnableDecr implements Runnable { private ShareData data; public MyRunnableDecr(ShareData data) { this.data = data; } @Override public void run() { data.decrement(); } public MyRunnableDecr() {} } // 自增和自减业务类 class ShareData { private int j = 0; // 自增 public synchronized void increment() { for (int i=0; i<50; i++) { j++; System.out.println("[++]j====" + j); } } // 自减 public synchronized void decrement() { for (int i=0; i<50; i++) { j--; System.out.println("[--]j====" + j); } } }
打印结果:
[++]j====1 [++]j====2 [++]j====3 [++]j====4 [++]j====5 [++]j====6 [++]j====7 [++]j====8 [++]j====9 [++]j====10 [++]j====11 [++]j====12 [++]j====13 [++]j====14 [++]j====15 [++]j====16 [++]j====17 [++]j====18 [++]j====19 [++]j====20 [++]j====21 [++]j====22 [++]j====23 [++]j====24 [++]j====25 [++]j====26 [++]j====27 [++]j====28 [++]j====29 [++]j====30 [++]j====31 [++]j====32 [++]j====33 [++]j====34 [++]j====35 [++]j====36 [++]j====37 [++]j====38 [++]j====39 [++]j====40 [++]j====41 [++]j====42 [++]j====43 [++]j====44 [++]j====45 [++]j====46 [++]j====47 [++]j====48 [++]j====49 [++]j====50 [--]j====49 [--]j====48 [--]j====47 [--]j====46 [--]j====45 [--]j====44 [--]j====43 [--]j====42 [--]j====41 [--]j====40 [--]j====39 [--]j====38 [--]j====37 [--]j====36 [--]j====35 [--]j====34 [--]j====33 [--]j====32 [--]j====31 [--]j====30 [--]j====29 [--]j====28 [--]j====27 [--]j====26 [--]j====25 [--]j====24 [--]j====23 [--]j====22 [--]j====21 [--]j====20 [--]j====19 [--]j====18 [--]j====17 [--]j====16 [--]j====15 [--]j====14 [--]j====13 [--]j====12 [--]j====11 [--]j====10 [--]j====9 [--]j====8 [--]j====7 [--]j====6 [--]j====5 [--]j====4 [--]j====3 [--]j====2 [--]j====1 [--]j====0 [++]j====1 [++]j====2 [++]j====3 [++]j====4 [++]j====5 [++]j====6 [++]j====7 [++]j====8 [++]j====9 [++]j====10 [++]j====11 [++]j====12 [++]j====13 [++]j====14 [++]j====15 [++]j====16 [++]j====17 [++]j====18 [++]j====19 [++]j====20 [++]j====21 [++]j====22 [++]j====23 [++]j====24 [++]j====25 [++]j====26 [++]j====27 [++]j====28 [++]j====29 [++]j====30 [++]j====31 [++]j====32 [++]j====33 [++]j====34 [++]j====35 [++]j====36 [++]j====37 [++]j====38 [++]j====39 [++]j====40 [++]j====41 [++]j====42 [++]j====43 [++]j====44 [++]j====45 [++]j====46 [++]j====47 [++]j====48 [++]j====49 [++]j====50 [--]j====49 [--]j====48 [--]j====47 [--]j====46 [--]j====45 [--]j====44 [--]j====43 [--]j====42 [--]j====41 [--]j====40 [--]j====39 [--]j====38 [--]j====37 [--]j====36 [--]j====35 [--]j====34 [--]j====33 [--]j====32 [--]j====31 [--]j====30 [--]j====29 [--]j====28 [--]j====27 [--]j====26 [--]j====25 [--]j====24 [--]j====23 [--]j====22 [--]j====21 [--]j====20 [--]j====19 [--]j====18 [--]j====17 [--]j====16 [--]j====15 [--]j====14 [--]j====13 [--]j====12 [--]j====11 [--]j====10 [--]j====9 [--]j====8 [--]j====7 [--]j====6 [--]j====5 [--]j====4 [--]j====3 [--]j====2 [--]j====1 [--]j====0