线程范围内共享数据的例子

设计四个线程,其中两个线程每次给增加j增加一,另外两个给j减一。
在这里插入图片描述

package martina.TraditionalThread;

/**
 * 设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。
 * 方式一:调用两个继承了Runnable类的类进行数据的加减操作
 */
public class ThreadScopeDataTest{
    public static Integer i = 10;

    public static void main(String[] args){
        new Thread(new Incre(i)).start();
        new Thread(new Decre(i)).start();
    }

    static class Incre implements Runnable {
        public static Integer i;
        public Incre(Integer i){
            this.i=i;
        }
        @Override
        public void run() {
            while(true) {
                i++;
                System.out.println("Incre :"+i);
                if(i>30) break;
            }
        }
    }
    static class Decre implements Runnable {
        public static Integer i;
        public Decre(Integer i){
            this.i=i;
        }
        @Override
        public void run() {
            while(true) {
                i--;
                System.out.println("Decre:"+i);
                if(i<0) break;
            }
        }
    }
}

方式二
package martina.TraditionalThread;

/**

  • 设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。

  • 将操作放在一个类中,用两个线程实现类中的两个方法
    */
    public class ThreadScopeDataTest01 {

    public static void main(String[] args){
    new Thread(new Runnable() {
    @Override
    public void run() {
    SharedData1.drecrease();
    //System.out.println(" SharedData1.drecrease():"+SharedData1.i);
    }
    }).start();
    new Thread(new Runnable() {
    @Override
    public void run() {
    SharedData1.increment();

         }
     }).start();
    

    }

}
class SharedData1{
public static Integer i=10;
public static void increment(){
while(i<30){
i++;
System.out.println(" SharedData1.increment():"+SharedData1.i);
}

}
public  static void drecrease(){
    while(i>0){
        i--;
        System.out.println(" SharedData1.decrease():"+SharedData1.i);
    }

}

}

方式三:将实现加减操作的类放在main方法的类中(也就是内部类的实现)
但是以上方法都没有实现加减操作的轮替执行。
标答:

package martina.TraditionalThread;

/**

  • 设计四个线程,其中两个线程每次给增加i增加一,另外两个给i减一。
    */
    public class ThreadScopeDataTest02 {
    public static Integer i = 10;

    public static void main(String[] args){
    ThreadScopeDataTest02 tt=new ThreadScopeDataTest02();
    Incre incre=tt.new Incre(i);
    Decre decre=tt.new Decre(i);
    for(int i=0;i<2;i++) {
    new Thread(incre).start();
    new Thread(decre).start();
    }
    }
    synchronized void incre(){
    i++;
    System.out.println(Thread.currentThread().getName()+“Incre :”+i);
    }
    synchronized void decre(){
    i–;
    System.out.println(Thread.currentThread().getName()+“Decre :”+i);
    }
    class Incre implements Runnable {
    public Integer i;
    public Incre(Integer i){
    this.i=i;
    }

     @Override
     public void run() {
         for(int i=0;i<20;i++) {
             incre();
         }
     }
    

    }
    class Decre implements Runnable {
    public Integer i;
    public Decre(Integer i){
    this.i=i;
    }
    @Override
    public void run() {
    for(int i=0;i<20;i++) {
    decre();
    }
    }

    }
    }

猜你喜欢

转载自blog.csdn.net/mulinsen77/article/details/84350794