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 基础 元素 标签
    HTML5 元素介绍
    网站程序 模板下载 下载 ftp
    域名解析和空间绑定
    如何选择云虚拟主机操作系统?
    网站备案查询
    响应式网站01
    项目中使用百度统计和友盟统计
    项目中使用http referer,为了盗取图片资源
    vue-awesome-swiper中的数据异步加载
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3421943.html
Copyright © 2011-2022 走看看