您的位置:首页 > 其它

多线程的join方法和Yield方法以及优先级问题

2017-01-04 12:06 337 查看
join方法

Yield方法

线程优先级路权

join()方法

t1.join()意味着当前运行线程要等待t1,是实例方法

package sisuo;

public class Test extends Thread {
@Override
public void run() {//主线程
ThreadDemo t=new ThreadDemo();
t.setName("线程A");
t.start();

JoinThread j= new JoinThread();
j.setName("加入的线程");

j.start();
t.b=false;

try {
j.join();//等待前边所有线程结束,然后执行后边的线程,约束主线程
} catch (InterruptedException e) {
System.out.println("等待线程结束时异常");
}

System.out.println("主线程开启");
for (int i = 1; i < 101; i++) {
System.out.println(Thread.currentThread().getName()+"主线程执行了"+i+"次");
}
System.out.println("主线程执行结束!");

}

public static void main(String[] args) {
new Test().start();//开启主线程
}

}

package sisuo;

public class JoinThread extends Thread {
@Override
public void run() {

4000
System.out.println("加入的线程开始执行");
for (int i = 1; i <11; i++) {
System.out.println(Thread.currentThread().getName()+"加入的线程执行了"+i+"次");
}
System.out.println(Thread.currentThread().getName()+"执行结束");
}

}

package sisuo;

public class ThreadDemo extends Thread {
public boolean b=true;
@Override
public void run() {
while(b){
for (int i = 1; i < 6; i++) {
System.out.println(Thread.currentThread().getName()+"执行了"+i+"次");
}
}
System.out.println(Thread.currentThread().getName()+"执行结束");
}

}


Yield方法

类方法,一个线程把CPU让出来,让给谁并不明确,Thread.yield();

for (int i = 0; i < 10000; i++) {
System.out.println("按回车键干扰");
s.nextLine();
t1.interrupt();
if(i==50){
Thread.yield();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


线程优先级(路权)

优先级高的线程往往会得到CPU的优先加载,会先执行,Java线程Thread的优先级共有10级,最低为1,最高为10,包括main线程在内默认优先级都是5

public static void main(String[] args) {
//      主线程的优先级
System.out.println(Thread.currentThread().getPriority());
System.out.println("最高优先级:"+Thread.MAX_PRIORITY);
System.out.println("最低优先级:"+Thread.MIN_PRIORITY);
System.out.println("默认优先级:"+Thread.NORM_PRIORITY);

MyThread mt1 = new MyThread();
Thread t1 = new Thread(mt1);
t1.setName("追龙");

MyThread mt2 = new MyThread();
Thread t2 = new Thread(mt2);
t2.setName("奇门遁甲");

MyThread mt3 = new MyThread();
Thread t3 = new Thread(mt3);
t3.setName("机器之血");
//      设置优先级
t1.setPriority(8);
t2.setPriority(2);

t1.start();
t2.start();
t3.start();
System.out.println(t1.getPriority());
System.out.println(t2.getPriority());
System.out.println(t3.getPriority());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐