java多线程2:控制线程方法
java多线程二:控制线程方法
join线程:
1、Thread线程提供了让一个线程等待另外一个线程执行完成的方法:join方法。当某个正在执行的线程A调用了B线程的join()方法时,那么A线程将会被阻塞,知道B线程执行完成为止才会可能执行。
2、join有三种重载形式:
join():等待被join的线程执行完成。
join(long mills):等待被join的线程的最长时间为mills毫秒,如果在mills毫秒内,被join的线程还没有执行完成则不再等待。
package com.yt.manager.thread; /** * join()线程 * * @author zxf 让一个线程等待另外一个线程执行完成的方法 */ public class JoinThread extends Thread { public JoinThread(String name) { super(name); } @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println(getName() + " " + i); } } public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 100; i++) { if (i == 20) { JoinThread joinThread = new JoinThread("被join的线程"); joinThread.start(); // main线程调用了joinThread线程的join()方法, main线程必须等 // joinThread线程执行结束后才会向下执行。 joinThread.join(); } System.out.println(Thread.currentThread().getName() + " " + i); } } }
线程睡眠Sleep:
1、如果我们需要将当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以调用Thread类的静态方法sleep(long millis)。当当前线程调用sleep方法进入阻塞状态后,在其sleep时间内,该线程不会获得任何执行的机会,即使系统中没有其它正在运行的线程,处于sleep的线程
也不会运行,因此sleep方法常用来暂停程序的执行。
package com.yt.manager.thread; /** * 线程睡眠sleep * @author zxf * */ public class SleepThread { public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 10; i++) { System.out.println(i); Thread.sleep(5000); } } }
线程让步:
1、它可以让当前正在执行的线程暂停,但不会阻塞线程,它只是将该线程转入就绪状态,yield()方法只是让线程调度器重新调度一次。完全有可能的情况是,当某个线程调用了yield()方法暂停之后,线程调度器又将其调度起来重新执行。实际上当某个线程调用了yield()方法暂停后,只有优先级与当前线程相同,或者优先级比当前线程高的线程才有可能获得执行的机会。
package com.yt.manager.thread; /** * 线程让步 * * @author zxf * */ public class YieldThread extends Thread { public YieldThread(String name) { super(name); } @Override public void run() { for(int i=0;i<100;i++){ System.out.println(getName()+" "+i); //当i==20时,让当前线程做出让步 if(i==21){ Thread.yield(); } } } /** * @param args */ public static void main(String[] args) { YieldThread y1 = new YieldThread("高级"); //y1.setPriority(Thread.MAX_PRIORITY); y1.start(); YieldThread y2 = new YieldThread("低级"); //y2.setPriority(Thread.MIN_PRIORITY); y2.start(); } }