[线程]
public class ThreadSleep extends Thread
{
public void run(){
for(int a=0;a<50;a++){
try{Thread.sleep(500);}catch(InterruptedException e){}
System.out.println(Thread.currentThread().getName()+" : "+a);
}
}
public static void main(String[] args)
{
ThreadSleep t1=new ThreadSleep();
ThreadSleep t2=new ThreadSleep();
t1.start();
t2.start();
}
}
在java程序中要创建一个线程有两种方法,一种是extends Thread;另一种是implements Runnable;
当然推荐使用implements Runnable这种方法,因为实现此接口的同时也可实现其他接口,而继承Thread类后,不能再同时继承其他类了。
但是当我们要在一个线程中使用sleep()方法时,如果使用extends Thread方法去创建类那么可以直接使用sleep()方法,如果使用的是implements Runnable创建类,那么必须是Thread.sleep()的格式,否则编译器报错。
1.Thread.Sleep(XXXX)函数就是干这种事的,他告诉操作系统“在未来的多少毫秒内我不参与CPU竞争”。
2.而Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。
竞争 的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权。这也是我们在大循环里面经
常 会写一句Thread.Sleep(0) ,因为这样就给了其他线程比如Paint线程获得CPU控制权的权力,这样界面就不会假死在那里。
notify方法:在当前线程放弃了对象锁以后随机唤醒一个在该对象上等待的线程。