m0_69473531 2023-11-16 11:21 采纳率: 78.6%
浏览 7
已结题

用java解决多线程问题

定义一个计数器Counter类,包含两个方法incr()和decr()用于自增和自减计数器。同时定义两个线程,一个线程执行incr()方法,另外一个线程执行decr()方法。在实验中使用Synchronized关键字对incr()方法和decr()方法进行同步控制,确保在同一时刻自有一个线程访问。

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-18 07:50
    关注

    【以下回答由 GPT 生成】

    当然可以帮您解决这个问题!下面是一个使用Java解决多线程同步控制问题的示例:

    首先,我们定义一个Counter类,包含一个计数器count和incr()和decr()方法:

    class Counter {
        private int count = 0;
    
        public synchronized void incr() {
            count++;
            System.out.println("Increased: " + count);
        }
    
        public synchronized void decr() {
            count--;
            System.out.println("Decreased: " + count);
        }
    }
    

    在这个例子中,我们使用了synchronized关键字来对incr()和decr()方法进行同步控制,确保在同一时刻只有一个线程可以访问这两个方法。

    接下来,我们定义两个线程分别执行incr()和decr()方法:

    class IncrThread extends Thread {
        private Counter counter;
    
        public IncrThread(Counter counter) {
            this.counter = counter;
        }
    
        public void run() {
            for (int i = 0; i < 5; i++) {
                counter.incr();
                try {
                    Thread.sleep(100); // 为了让效果更明显,让线程休眠一段时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    class DecrThread extends Thread {
        private Counter counter;
    
        public DecrThread(Counter counter) {
            this.counter = counter;
        }
    
        public void run() {
            for (int i = 0; i < 5; i++) {
                counter.decr();
                try {
                    Thread.sleep(100); // 为了让效果更明显,让线程休眠一段时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    在这里,我们定义了一个IncrThread线程和一个DecrThread线程,它们分别执行counter的incr()方法和decr()方法。

    最后,我们创建一个Counter实例并启动两个线程:

    public class Main {
        public static void main(String[] args) {
            Counter counter = new Counter();
            IncrThread incrThread = new IncrThread(counter);
            DecrThread decrThread = new DecrThread(counter);
    
            incrThread.start();
            decrThread.start();
    
            try {
                incrThread.join();
                decrThread.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    在主线程中,我们创建了一个Counter实例和两个线程,并启动这两个线程。最后,我们使用join()方法来等待这两个线程执行完毕。

    这样,我们就实现了使用Java解决多线程同步控制问题。在运行程序时,您会看到incr()方法和decr()方法交替执行,保证了在同一时刻只有一个线程访问。

    希望这个解决方案对您有帮助!如果您有任何进一步的问题,请随时提问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月16日

悬赏问题

  • ¥15 Vue 前端调用本地jar包有什么方法?
  • ¥20 py3.7.4离线安装openpyxl等错误
  • ¥15 基础的图像处理问题求解答
  • ¥50 全国两定智慧医保接口开发相关业务文档,以及技术实现流程文档
  • ¥15 idea做图书管理系统,要求如下
  • ¥15 最短路径分配法——多路径分配
  • ¥15 SQL server 2022安装程序(英语)无法卸载
  • ¥15 关于#c++#的问题:把一个三位数的素数写在另一个三位数素数的后面
  • ¥15 求一个nao机器人跳舞的程序
  • ¥15 anaconda下载后spyder内无法正常运行