Java线程生成方法查询
我正在练习线程,我使用了yield(),我希望输出如下:(但没有得到预期的结果) 我下面的代码有什么问题?Java线程生成方法查询,java,multithreading,Java,Multithreading,我正在练习线程,我使用了yield(),我希望输出如下:(但没有得到预期的结果) 我下面的代码有什么问题? public class Main2 { public static void main(String[] args) { MyThread myThread1 = new MyThread("One"); MyThread myThread2 = new MyThread("Two"); /*Thread t1 = new T
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();
}
}
}
等待您的答复。方法yield()
在其javadoc中清楚地声明它是
提示调度程序当前线程愿意让步
它当前使用的处理器。调度程序可以随意忽略此项
暗示
因此,您不能总是期望执行传递给另一个线程。没有保证
另外,在你的问题中,评论的语句是否正确使用,不,它不会改变任何东西。
Thread
构造函数接受一个Runnable
参数,它最终将在该参数上执行run()
方法。线程
类实现可运行
,因此是一个有效的参数,但它的效果与启动线程
本身的效果相同。如果扩展线程
,则按照现有方式执行。如果实现了Runnable
,则可以按注释方式执行。两种方式都可以
请注意,yield
实际上只是一个建议,因此输出的顺序并不确定。如果您希望始终保持这种特定方式,则需要使用锁或其他技术。指出
使当前正在执行的线程对象暂时暂停并允许其他线程执行
所以在这里你不会得到预期的输出。
如果需要预期的输出,请使用具有适当同步的wait()
和notify()
方法。我想知道注释的语句是否正确使用?
是的,这是100%有效的java语法。您得到的不是预期的输出,而是什么?
yield
应该用作测试工具,而不是逻辑工具。“我正在练习线程,我使用了yield()”-失败。
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();