★ Java的多线程是抢占式的运行方式–setPriority()
public class myThread extends Thread{
private int first;
public myThread(int first){
this.first=first;
}
@Override
public void run() {
for(int i=first;i<=100;i+=2){
System.out.print(i+" ");
}
System.out.println();
}
}
public class client {
public static void main(String[] args) {
myThread t1=new myThread(1);
myThread t2=new myThread(2);
t1.setPriority(5);
t2.setPriority(7);//线程优先级,,高的会占一点优势。。相对调度
t1.start();
// t1.start();//IllegalThreadStateException非法线程状态--再次启动已启动的线程
t2.start();
}
}
★ sleep()方法
Thread类的sleep()方法对当前线程操作,是静态方法。sleep()的参数指定以毫秒为单位的线程休眠时间。除非因为中断而提早恢复执行,否则线程不会在这段时间之前恢复执行。
★ interrupt()方法
一个线程可以调用另外一个线程的interrupt()方法,这将向暂停的线程发出一个InterruptedException。变相起到唤醒暂停线程的功能。Thread类的方法interrupt(),是一种强制唤醒的技术。
public class myThread extends Thread{
private int first;
public myThread(int first){
this.first=first;
}
@Override
public void run() {
if(first==2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("wake up...");
}
}
for(int i=first;i<=100;i+=2){
System.out.print(i+" ");
}
System.out.println();
}
}
public class client {
public static void main(String[] args) {
myThread t1=new myThread(1);
myThread t2=new myThread(2);
t1.start();
t2.start();
t2.interrupt();//mian线程强制唤醒t2
}
}
★ yield()方法
用来使具有相同优先级的线程获得执行的机会。如果具有相同优先级的其它线程是可运行的,yield()将把线程放到可运行池中并使另一个线程运行。如果没有相同优先级的可运行线程,则什么都不做。
注意,执行一次yield()方法,该线程只是放弃当前这一次机会,然后又会重新和其它线程一起抢占CPU,很可能又比其它线程先抢到。
★ join()方法
调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程结束,再恢复当前线程的运行。它可以实现线程合并的功能,经常用于线程的绝对调度。
public class myThread extends Thread{
private int first;
public myThread(int first){
this.first=first;
}
@Override
public void run() {
if(first==1){
yield();//只把机会让给同一优先级的线程。
}
for(int i=first;i<=100;i+=2){
System.out.print(i+" ");
}
System.out.println();
}
}
public class client {
public static void main(String[] args) {
myThread t1=new myThread(1);
myThread t2=new myThread(2);
t1.setPriority(6);
t2.setPriority(6);
t1.start();
// try {
// t1.join();//从当前位置,把所有t1线程要执行的任务执行完---绝对调度相当于单线程。
// } catch (InterruptedException e) {
// System.out.println("绝对调度异常");
// }
t2.start();
}
}