多线程基础问题,菜鸟求教

weidu23 2013-12-03 06:01:35
1、想问:线程中断是不是说该线程结束了?还是说重新阻塞了?还是别的?不太知道
2、yield了,那么正在运行的线程进入就绪了,此时调度同级或更高的线程,但是,貌似有时候不灵?
请看我代码:
把我的问题1和问题2都融入进去了:

public class Thread2 {
public static void main(String[] args) {
Join join = new Join();
Thread runJoin = new Thread(join) ;
runJoin.start();
int i = 0 ;
while(true){
if( i%5 == 0 )
try{
runJoin.join(3000);
}catch(Exception err){err.printStackTrace();}
if( i == 51 )
break ;
System.out.println("hello,i am"+Thread.currentThread().getName()+",now i = "+i);
i++ ;
}
}
}
class Join implements Runnable {

@Override
public void run(){
for( int i=0 ; true ; i++ ){
if( i == 51 )
Thread.currentThread().interrupt();
if( i == 33 )
Thread.currentThread().yield();
System.out.println("现在是我,"+Thread.currentThread().getName()+"在运行,此时 i="+i);
if( Thread.currentThread().isInterrupted() )
System.out.println(Thread.currentThread().getName()+": 额,我被中断了一下下");
try{
Thread.sleep(500);
}
catch(Exception err){err.printStackTrace();}
}
}

Join(){
}

}


1、class Join中, i == 33时yield一下,可是当前线程没有放弃,没有交给main来调度,why?
2、class Join中, i == 51时,也就中断一下下,就恢复了之前运行的Thread线程的运行权,咋回事,不太懂?

求教!
...全文
156 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
依然绿茶 2013-12-03
  • 打赏
  • 举报
回复
线程中断其实就是由于时间片用完而被CPU剥夺运行,它并不是阻塞或者结束一个线程,下次该分到时间片运行的时候照样运行
ddxx663 2013-12-03
  • 打赏
  • 举报
回复
yield后该线程又是就绪中,现在是多核,它马上就又得到一个cpu了,
weidu23 2013-12-03
  • 打赏
  • 举报
回复
自己先顶顶!!!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧