多线程(守护线程、join方法、线程优先级、线程组)
setDaemon(boolean on):
守护线程(后台线程),若前台(显示)线程都结束了则后台线程自动结束。
使用setDaemon(boolean on)方法,必须在开启线程前将线程标记为守护线程。
示例:
class setDaemon implements Runnable { public void run() { while (true) { System.out.println(Thread.currentThread().getName()+"...run"); } } } class setDaemonDemo { public static void main(String[] args) { setDaemon sd = new setDaemon(); Thread t1 = new Thread(sd); Thread t2 = new Thread(sd); //将t1、t2标记为守护线程。(若要使一线程成为守护线程必须要在它开启前标记) t1.setDaemon(true); t2.setDaemon(true); t1.start(); t2.start(); //前台main线程,若main线程结束,则t1、t2自动结束 for (int i=0;i<60;i++) { System.out.println(Thread.currentThread().getName()+"......"+i); } } }
join():
join方法能使线程取得cpu执行权,而将执行权交给调用了join方法的线程则必须等使用了join方法的线程执行完才能开始执行
(当A线程执行到了B线程的.join()方法时,A就会等待。等B线程都执行完,A才会执行。
join可以用来临时加入线程执行。)
示例:
class join implements Runnable { public void run() { for (int i=0; i<70; i++) { System.out.println(Thread.currentThread().getName()+"..."+i); } } } class joinDemo { public static void main(String[] args) { join j = new join(); Thread t1 = new Thread(j); Thread t2 = new Thread(j); t1.start(); //main线程执行到join时将执行权交给了t1,main线程陷入休眠状态。t1执行完了,main才能开始执行。 //而此时只有main 和 t1线程,t2未开启 try { t1.join(); } catch (InterruptedException e) { } t2.start(); for (int i=0; i<70; i++) { System.out.println(Thread.currentThread().getName()+"..............."+i); } } }
线程组:
某一线程是哪一条线程开启的它就是那一组的线程,(A线程是B线程开启的,A线程就是B组的)
ThreadGroup类(线程组类)提供了线程组的操作,但实际开发中很少用到。
线程优先级:
优先级分为1到10,1最小10最大。
setPriority(int num):设置线程的优先级,
MAX_PRIORITY:设置最高优先级、MIN_PRIORITY:设置最低优先级、NORM_PRIORITY分配给线程默认的优先级(5)。
//设置线程优先级演示 class SetThreadPriorityDemo implements Runnable { public void run() { for(int number=0; number<60; number++) { System.out.println(Thread.currentThread().getName()+":"+number); } } } //线程优先级演示 class ThreadPriorityDemo { public static void main(String[] args) { SetThreadPriorityDemo st = new SetThreadPriorityDemo(); Thread t1 = new Thread(st); Thread t2 = new Thread(st); Thread t3 = new Thread(st); //通过线程类Thread的toString()方法打印线程的信息,包括线程名称、优先级、线程组 System.out.println(t1.toString()); System.out.println(t2.toString()); System.out.println(t3.toString()); //设置线程的优先级 //MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORITY三个为Thread类定义的三个代表线程优先级的静态常量数值 t1.setPriority(Thread.MAX_PRIORITY);//MAX_PRIORITY代表最高优先级10. t2.setPriority(Thread.MIN_PRIORITY);//MIN_PRIORITY代表最低优先级1. t3.setPriority(Thread.NORM_PRIORITY);//NORM_PRIORITY代表默认优先级5. //开启线程。 t1.start(); t2.start(); t3.start(); } }
yield方法:
暂停当前正在执行的线程对象,并执行其他线程。