多线程—守护线程及其他方法

守护线程与非守护线程:

线程从 是否可以独立执行的角度,可分为用户线程和守护线程,通常创建出来的线程都是用户线程(非守护线程),但可以通过setDaemon(true)将用户线程转化为守护线程

用户线程可以独立运行,守护线程不可以,也就是说,如果进程中,已经没有用户线程,只剩下守护线程,则守护线程会自动退出。

1.setDaemon()

 void

setDaemon(boolean on)

          将该线程标记为守护线程或用户线程。

boolean

isDaemon()

          测试该线程是否为守护线程。

 

案例:王者荣耀

		package cn.tedu.thread;
		
		/**
		 * 守护线程 - 王者荣耀 游戏开发
		 */
		public class Demo05 {
			public static void main(String[] args) throws Exception {
				new Thread(new ShuiJing()).start();
				
				Thread t1 = new Thread(new Hero("安其拉")); 
				Thread t2 = new Thread(new Hero("孙悟空")); 
				Thread t3 = new Thread(new Hero("诸葛亮")); 
				Thread t4 = new Thread(new Hero("吕布")); 
				Thread t5 = new Thread(new Hero("亚瑟"));
				
				t1.setDaemon(true);//设置为守护线程
				t2.setDaemon(true);
				t3.setDaemon(true);
				t4.setDaemon(true);
				t5.setDaemon(true);
				
				t1.start();
				t2.start();
				t3.start();
				t4.start();
				t5.start();
				
				while(ShuiJing.blood>0){
					Thread.sleep(1000);
					ShuiJing.blood -= 8;
				}
			}
		}
		
		class Hero implements Runnable{
			private String name = null;
			public Hero(String name) {
				this.name = name;
			}
			
			@Override
			public void run() {
				while(true){
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(name+"说:为了水晶,冲啊~~~碾碎他们。。");
				}
			}
			
		}
		
		class ShuiJing implements Runnable{
			public static int blood = 100;
			@Override
			public void run() {
				while(this.blood>0){
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("全军出击,守卫水晶。。血量剩余"+blood);
				}
				System.out.println("水晶被打爆了。。游戏结束。。。");
			}
		}

多线程—守护线程及其他方法_第1张图片 

2.join() :

在当前线程执行时可以调用另一个线程的join方法,则当前线程立即进入阻塞模式,直到被join进来的线程执行完成为止

void

join()

          等待该线程终止。

案例:

		package cn.tedu.thread;
		
		/**
		 * join
		 * @author Administrator
		 *
		 */
		public class Demo06 {
			public static void main(String[] args) throws Exception {
				System.out.println("上数学课。。。");
				System.out.println("上数学课。。。");
				System.out.println("上数学课。。。");
				System.out.println("上数学课。。。");
				Thread t = new Thread(new Thread_06());
				t.start();
				t.join();//将进入阻塞模式 直到 t执行完成
				System.out.println("上数学课。。。");
				System.out.println("上数学课。。。");
				System.out.println("上数学课。。。");
				System.out.println("上数学课。。。");
			}
		}
		
		class Thread_06 implements Runnable{
			@Override
			public void run() {
				System.out.println("做广播体操开始。。。");
				try {
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println("做广播体操结束。。。");
			}
		}

3.yield()

static void

yield()

          暂停当前正在执行的线程对象,并执行其他线程。

你可能感兴趣的:(Java多线程)