日期:2014-05-20  浏览次数:20855 次

多线程基础问题,菜鸟求教
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线程的运行权,咋回事,不太懂?

求教!

------解决方案--------------------
yield后该线程又是就绪中,现在是多核,它马上就又得到一个cpu了,
------解决方案--------------------
线程中断其实就是由于时间片用完而被CPU剥夺运行,它并不是阻塞或者结束一个线程,下次该分到时间片运行的时候照样运行