zoukankan      html  css  js  c++  java
  • 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

    本题并不难,实现方式有很多种,有很多种结构。

    方法一:利用内部类实现,两个实现加减的类实现Runnable接口,然后再实现4个具体线程。

    代码:

    package mystudy;
    
    public class ManyThreads {
    
        private int j;
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            ManyThreads many = new ManyThreads();
            Inc inc = many.new Inc();
            Dec dec = many.new Dec();
            for (int i = 0; i < 2; i++) {
                Thread t = new Thread(inc);
                t.start();
                t = new Thread(dec);
                t.start();
            }
        }
    
        private synchronized void inc() {
            j++;
            System.out.println(Thread.currentThread().getName() + "inc" + j);
        }
    
        private synchronized void dec() {
            j--;
            System.out.println(Thread.currentThread().getName() + "dec" + j);
        }
    
        class Inc implements Runnable {
    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                for (int i = 0; i < 20; i++) {
                    inc();
                }
            }
    
        }
    
        class Dec implements Runnable {
    
            @Override
            public void run() {
                // TODO Auto-generated method stub
                for (int i = 0; i < 20; i++) {
                    dec();
                }
            }
    
        }
    }

    第二种方式:具体加减操作写在一个类的方法里,没有内部类,用另外一个类去调用。

    代码:

    public class ManyThreads2 {
        private int j = 0;
    
        public synchronized void inc() {
            j++;
            System.out.println(Thread.currentThread().getName() + "inc" + j);
        }
    
        public synchronized void dec() {
            j--;
            System.out.println(Thread.currentThread().getName() + "dec" + j);
        }
    
    }

    调用:

    public class MyTest {
    
        private ManyThreads2 many = new ManyThreads2();
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            MyTest myTest = new MyTest();
            myTest.test();
        }
    
        public void test() {
            for (int i = 0; i < 2; i++) {
                new Thread(new Runnable() {
    
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        for (int i = 0; i < 20; i++) {
                            many.inc();
                        }
                    }
    
                }).start();
                new Thread(new Runnable() {
    
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        for (int i = 0; i < 20; i++) {
                            many.dec();
                        }
                    }
    
                }).start();
            }
        }
    }

    仅供参考。。

  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3421943.html
Copyright © 2011-2022 走看看