0

我正在尝试优先考虑线程 b,但它仍然不起作用,有时在 b 优先级不起作用之前打印线程 t,我不确定代码是否有任何帮助!

public static void main(String[] args) throws Exception {
    Thread t = new Thread(new one("this is t thread"));
    Thread b = new Thread(new one("this is b thread"));

    b.setPriority(10);
    t.setPriority(4);

    t.start();
    b.start();
}    


class one implements Runnable {
    String name;

    public one(String n) {
        name = n;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(name);
        }
    }
}
4

1 回答 1

2

线程,即使具有优先级,在设计上也是独立的。如果没有锁定,您将无法保证任何事情。

您可以创建任何对象并将其称为 lockObject。

然后您可以让线程 t 启动,并lockObject.wait()在打印前调用。

线程 b 然后调用它的 print然后调用lockObject.notify()确保它是同一个对象的同一个实例(只需static Object lockObject=new Object()在你的类中声明它)

如果线程 t 开始击败线程 b,它将等待通知。在此通知触发之前,t 必须已打印。

这不是最佳方法,但对于这个问题应该足够了

于 2013-07-09T20:16:17.250 回答