sleep可以由类名直接调用:? Thread.sleep(…)?join方法?合并某个线程?yield方法?让出CPU,给其他线程执行的机会Р线程模式Р两种线程模式:?协作式:一个线程保留对处理器的控制直到它自己决定放弃?速度快、代价低?用户编程非常麻烦?抢先式。系统可以任意的从线程中夺回对CPU的控制权,再把控制权分给其它的线程。?两次切换之间的时间间隔就叫做时间片?效率不如协作式高,OS核心必须负责管理线程?简化编程,而且使程序更加可靠?多数线程的调度是抢先式的。Р线程的优先级别РJava提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程。线程调度器按照线程的优先级决定应调度哪个线程来执行。? 线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5。? Thread.MIN_PRIORITY = 1? Thread.MAX_PRIORITY = 10? Thread.NORM_PRIORITY = 5? 使用下述线方法获得或设置线程对象的优先级。? int getPriority();? void setPriority(int newPriority);?不同平台上的优先级?Solaris:相同优先级的线程不能相互抢占对方的cpu时间。?windows:可以抢占相同甚至更高优先级的线程的cpu时间Р临界资源问题(1)Р两个线程A和B在同时操纵Stack类的同一个实例(堆栈),A正在往堆栈里push一个数据,B则要从堆栈中pop一个数据。Рclass Stack{? int idx=0;? char[ ] data = new char[6];? public void push(char c){? data[idx] = c;? idx++;? }Аpublic char pop(){? idx--;? return data[idx];? }?}