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();
            }
        }
    }

    仅供参考。。

  • 相关阅读:
    Packetbeat协议扩展开发教程(2)
    C语言函数的定义和使用(2)
    C程序的函数说明使用和特点说明第一节
    C 利用移位运算符 把十进制转换成二进制
    while循环实现十进制转二进制
    C位运算符的使用
    C语言for 循环 9*9 实现九九乘法表
    C语言实现金字塔
    C语言实现的简单银行存取款程序 请输入如下数字命令
    C语言中一个字符对应一个ascii码;占一个1个字节8个二进制位;存到内存中也是用ascii的十进制的二进制表示
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3421943.html
Copyright © 2011-2022 走看看