黑马程序员技术交流社区
标题:
线程的yield()这个方法,请大神指教下
[打印本页]
作者:
丁永志
时间:
2013-7-15 23:03
标题:
线程的yield()这个方法,请大神指教下
本帖最后由 杨兴庭 于 2013-7-16 21:16 编辑
class Runn1 implements Runnable
{
public void run()
{
for (int i = 0;i<100 ;i++ )
{
System.out.print("*");
Thread.yield();
}
}
}
class Runn2 implements Runnable
{
public void run()
{
for (int i = 0;i<100 ;i++ )
{
System.out.print("+");
Thread.yield();
}
}
}
public class RunnTest2
{
public static void main(String [] args)
{
Runn1 r1 = new Runn1();
Runn2 r2 = new Runn2();
Thread t1 = new Thread(r1);
Thread t2 = new Thread(r2);
t1.start();
t2.start();
}
}
复制代码
为什么运行的结果不是*+*+ 这样有规律的 而运行的结果为什么是没有规律的?
作者:
杨增坤
时间:
2013-7-15 23:48
System.out.print("+");
Thread.yield();
System.out.print("*");
Thread.yield();
没有保证是一起执行的,有可能是执行了这一句System.out.print("+");后,被另一个线程抢占了CPU,执行System.out.print("*"); Thread.yield();
另一个线程获得执行权,继续执行;System.out.print("*"); 这样就 +**,这样的字符串,所以不是交替执行的,可以考虑用锁来限制。
作者:
张云杰
时间:
2013-7-16 02:40
这个是交替运行吧.. 表示是说 一个方法执行完的结果,然后执行到yield的时候, 线程会被放弃掉 接下去由另外一个线程执行
作者:
qq553046803
时间:
2013-7-16 07:14
可以考虑在方法哪里加个synchronized保证执行过程中不会执行其他线程上!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2