【问题标题】:Create a new console for each thread in java为java中的每个线程创建一个新的控制台
【发布时间】:2020-11-03 12:50:06
【问题描述】:

我想创建一个多线程应用程序,每个线程代表一个控制台并共享公共资源。从循环菜单和虚拟资源开始

public class Resource {
    int id;
    public Resource(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
}

菜单

        int choiceentry;
        Scanner scanchoice = new Scanner(System.in);
        Resource r = new Resource(10);
       //create 2 threads both having a console with menu and acces to the same resource r
        do {
            System.out.print("1.Get resource\n2.Set resource to random\n\n");
            System.out.print("Enter your option: ");
            choiceentry = scanchoice.nextInt();
            switch (choiceentry) {
            //get the resource id
                case 1:
                System.out.println("Resource get: " + r.getId());
                break;
           //set the resource id
            case 2:
                Random rand = new Random();
                int newId = rand.nextInt(10);
                r.setId(newId);
                System.out.println("Resource set to: " + newId);
                
                break;
            case 4:
                System.exit(0);
            default:
                System.out.println("Choice must be a value between 1 and 3.");
            }
            System.out.print("\n\n");
        } while (true);

是否可以启动 2 个使用菜单访问相同资源的控制台 r

【问题讨论】:

  • “两个控制台”是什么意思?两个黑框一个命令提示符在里面吗?
  • 命令提示符
  • 单个进程有一个标准输入/标准输出。所以不是真的,不。 GUI 将为多个输入提供更容易的访问。还有see here.

标签: java multithreading eclipse


【解决方案1】:

是否可以启动 2 个控制台。

没有。必须立即启动 java.exe,这可能不是您想要做的(这比编写一些基本的摇摆东西来创建 2 个 GUI 窗口要复杂得多)。

访问相同的资源 r

也没有。您不能从不同的线程访问同一个对象,除非您编写代码来控制从一个线程对该对象所做的更改如何同步到另一个线程。你没有显示任何这样的代码,这意味着你得到了这个特别讨厌的结果:在线程 1 中所做的任何更改是否在线程 2 中可见是任意:现在它是可见的,明天它不是.在您的计算机上它总是可以工作,在客户端计算机上它通常可以在您进行重要演示时失败。

需要共享状态的多线程代码相当复杂。大多数人通过数据库运行此类通信是有原因的 :)

【讨论】:

    猜你喜欢
    • 2011-12-22
    • 2013-07-19
    • 1970-01-01
    • 2016-04-03
    • 2015-01-01
    • 1970-01-01
    • 2014-12-10
    • 2013-03-04
    • 1970-01-01
    相关资源
    最近更新 更多