关于多线程最后提到了几个Thread类中的方法:join() 、 setPriority() 、yield()
join() 方法是使线程尝试获取执行权,用于某些时候需要临时加入新的线程,并让其优先运行。
package thread;
/**
* join()方法尝试夺取主线程执行权。
* 即当A线程执行到B线程的B.join()时,那么A线程就会等待,直到B线程执行完,A才回执行。
* join()主要用于临时加入执行线程
* @author asus
*
*/
public class JoinThreadDemo {
public static void main(String[] args) throws InterruptedException {
JoinDemo j = new JoinDemo();
Thread t = new Thread(j);
Thread t2 = new Thread(j);
t.start();
t2.start();
//将线程t临时加入,这样主线程会等待t线程执行结束,才回继续运行
//因为线程t2在该方法之前开启,所以不会影响线程t2的运行
t.join();
for(int i=0;i<70;i++){
System.out.println(Thread.currentThread().toString()+"..."+i+"...运行");
}
}
}
//一个简单线程类
class JoinDemo implements Runnable{
public void run(){
for(int i=0;i<70;i++){
System.out.println(Thread.currentThread().getName()+"..."+i+"...运行");
}
}
}
setPriority()是设置线程执行的优先级,优先级越大,则线程被执行的可能就越大,线程的默认优先级是5(最大是10,最小是1)。
yield() 是暂停某个正在运行的线程,如果给一个高优先级的线程使用,几乎就可以做到让其与别的线程交替运行。
package thread;
/**
* 一般线程默认优先级是5
* 设置优先级,1最低,10最高
* Thread.MAX_PRIORITY,优先级10
* Thread.NORM_PRIORITY,优先级5
* Thread.MIN_PRIORITY,优先级1
*
* 可以使用yield()方法暂停当前的执行对象,如果用在优先级高的线程上,可以稍微减缓线程执行频率,做到与其他线程几乎同优先级运行
* @author asus
*
*/
public class PriorityThreadDemo {
public static void main(String[] args) {
PriorityThread pt = new PriorityThread();
PriorityThread2 pt2 = new PriorityThread2();
Thread t = new Thread(pt2);
Thread t2 = new Thread(pt);
Thread t3 = new Thread(pt);
//为带有yield()方法的线程添加最高优先级
t.setPriority(Thread.MAX_PRIORITY);
//默认优先级是5,所以可以不用再次指定
// t2.setPriority(Thread.NORM_PRIORITY);
//设置优先级为1
t3.setPriority(Thread.MIN_PRIORITY);
t.start();
t2.start();
t3.start();
}
}
class PriorityThread implements Runnable{
//一般线程,用于测试优先级
public void run(){
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().toString()+"..."+i);
}
}
}
class PriorityThread2 implements Runnable{
//带有yield()的线程
public void run(){
for(int i=0;i<100;i++){
System.out.println(Thread.currentThread().toString()+"..."+i);
Thread.yield();
}
}
}
嗯 几天的多线程基础学习到这里就结束了