我正在练习线程,我使用yield(),我希望输出如下:(但没有达到预期的效果)
One1
Two1
One2
Two2
One3
Two3
.
.
.
.
以下代码有什么问题?
public class Main2 {
public static void main(String[] args) {
MyThread myThread1 = new MyThread("One");
MyThread myThread2 = new MyThread("Two");
/*Thread t1 = new Thread(myThread1);
Thread t2 = new Thread(myThread2);
t1.start();
t2.start();*/
myThread1.start();
myThread2.start();
}
}
class MyThread extends Thread {
private String name;
public MyThread(String name) {
this.name = name;
}
public void run(){
for(int i=1;i<=20;i++) {
System.out.println(name+i);
yield();
}
}
}
我还想知道评论的陈述是否正确使用?我的意思是:
Thread t1 = new Thread(myThread1);
Thread t2 = new Thread(myThread2);
t1.start();
t2.start();
等待你的回复..
答案 0 :(得分:1)
yield()
方法在其javadoc中明确指出它是
提示当前线程愿意产生的调度程序 它目前使用的是处理器。调度程序可以忽略这一点 提示。
因此,您不能总是期望执行传递给另一个线程。无法保证。
此外,在您的问题注释的语句是否正确使用,不,它不会改变任何东西。 Thread
构造函数接受Runnable
参数,最终将执行run()
方法。 Thread
类implements Runnable
因此是一个有效的参数,但它与您启动Thread
本身的效果相同。
答案 1 :(得分:0)
如果你extend thread
,你可以按照自己的方式进行。如果您implements Runnable
,则以评论方式执行此操作。无论哪种方式都没问题。
请注意,yield
实际上只是一个推荐,因此您的输出顺序无法确定。如果你希望它始终以某种方式使用,你需要使用锁或其他技术。
答案 2 :(得分:0)
使当前正在执行的线程对象暂时暂停并允许其他线程执行。
所以你不会在这里获得预期的输出。
如果您希望预期输出使用wait()
和notify()
方法并进行适当的同步
I would like to know does commented statements correct to use or not?
是的,这是100%有效的java语法。