【问题标题】:How to run main thread as a real time thread如何将主线程作为实时线程运行
【发布时间】:2011-08-03 09:46:56
【问题描述】:

在实时Java中,可以通过以下方法创建一个实时线程并运行它:

RealtimeThread rt = new RealtimeThread(){
    public void run(){
        /*do work*/
    }
};
rt.start();

RealtimeThread rt2 = new RealtimeThread();
rt2.start();

RealtimeThread rt3 = new RTThread();
rt3.start();

其中 RTThread 是一个扩展 RealtimeThread 的类。但很明显,上述方法在主要方面不起作用。那么有没有办法做到这一点?我这样做的动机是我只希望运行 2 个实时线程。如果我在 main 中启动两个实时线程,一共不会有 3 个线程吗?

【问题讨论】:

    标签: java real-time real-time-java


    【解决方案1】:

    如果RealtimeThreads 不是守护线程,您可以让主线程完成并保持所有内容在RealtimeThreads 内运行

    public class BootStrap extends Runnable{
    
        public static void main(String[] args){
            new RealtimeThread(new BootStrap()).start();
            //main finishes running and stops
        }
    
        public void run(){
        //...
        }
    }
    

    【讨论】:

    • 经过测试,效果很好。我还在public void run() 中的实际代码之前添加了sleep(),然后是CyclicBarrier,以确保main 真的死掉并且其他两个线程同时开始工作。
    【解决方案2】:

    如果我在 main 中启动两个实时线程,一共不会有 3 个线程吗?

    没有。如果你启动了两个线程,然后在 main 方法中返回 / “fall off the edge”,你就会有两个线程在运行。

    【讨论】:

      【解决方案3】:

      所有线程不是 RTJ 中的 RealTimeThreads 吗?包括主线程?

      【讨论】:

      • 那太棒了,但我不记得在任何地方读过它。还使用以下代码对此进行了测试:Thread currT = Thread.currentThread(); if(currT instanceof RealtimeThread) System.out.println("Yeah!"); else if(currT instanceof Thread) System.out.println("Meh."); else System.out.println("WTF O.o"); 它打印了“Meh”。
      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多