多线程 06 多个线程之间共享数据的方式探讨

题目:设计4个线程,其中两个线程 每次对j增加1,另外两个线程每次对j减少1,写出程序;

  1. 法一:共享数据和操作方法封装到一个内部类中

public class MultiThreadShareData {

    public static void main(String[] args){

        final ShareData shareData = new ShareData();

        for(int i=0;i<2;i++){

            new Thread(new Runnable() {

                @Override

                public void run() {

                    shareData.increment();

                }

            }).start();

            new Thread(new Runnable() {

                @Override

                public void run() {

                    shareData.decrement();

                }

            }).start();

        }

    }

    static class ShareData{

        private int j=100;

        public synchronized void increment(){

            j++;

            System.out.println("increment  "+j);

        }

        public synchronized void decrement(){

            j--;

            System.out.println("decrement  "+j);

        }

    }

}

(2)法二:

public class MultiThreadShareData2 {

 

    public static void main(String[] args){

        final ShareData shareData = new ShareData();

        for(int i=0;i<2;i++){

           new Thread(new MyRunnable1(shareData)).start();

            new Thread(new MyRunnable2(shareData)).start();

        }

    }

    static class ShareData{

        private int j=100;

        public synchronized void increment(){

            j++;

            System.out.println("increment  "+j);

        }

        public synchronized void decrement(){

            j--;

            System.out.println("decrement  "+j);

        }

    }

     static class MyRunnable1 implements  Runnable{

        private ShareData shareData=null;

 

         public MyRunnable1(ShareData shareData) {

             this.shareData=shareData;

         }

         @Override

         public void run() {

             shareData.increment();

         }

     }

    static class MyRunnable2 implements  Runnable{

        private ShareData shareData=null;

 

        public MyRunnable2(ShareData shareData) {

            this.shareData=shareData;

        }

        @Override

        public void run() {

            shareData.decrement();

        }

    }

}

如有疑问,请发邮件:[email protected]


github:  https://github.com/wangrui0/

猜你喜欢

转载自blog.csdn.net/qq_35524586/article/details/84972473