Java多线程1.4.线程控制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cmm0401/article/details/82316012

线程控制

1、线程控制

我们已经知道了线程调度,接下来我们就可以使用如下方法对线程进行控制。

  • 线程休眠:public static void sleep(long millis)
  • 线程加入:public final void join()
  • 线程礼让:public static void yield()
  • 后台线程:public final void setDaemon(boolean on)
  • 中断线程:public final void stop()    public void interrupt()

2、线程控制之线程休眠:public static void sleep(long millis)

(1)创建线程类:

package cn.itcast_04;

import java.util.Date;

public class ThreadSleep extends Thread {
	@Override
	public void run() {
		for (int x = 0; x < 100; x++) {
			System.out.println(getName() + ":" + x + ",ÈÕÆÚ£º" + new Date());
			// 我困了
			// 我要休息1秒钟
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

(2)测试线程类

package cn.itcast_04;

/*
 * 线程休眠
 *		public static void sleep(long millis)
 */
public class ThreadSleepDemo {
	public static void main(String[] args) {
		ThreadSleep ts1 = new ThreadSleep();
		ThreadSleep ts2 = new ThreadSleep();
		ThreadSleep ts3 = new ThreadSleep();

		ts1.setName("林青霞");
		ts2.setName("林志玲");
		ts3.setName("林志颖");

		ts1.start();
		ts2.start();
		ts3.start();
	}
}

3、线程控制之线程加入:public final void join()

(1)创建线程类

package cn.itcast_04;

public class ThreadJoin extends Thread {
	@Override
	public void run() {
		for (int x = 0; x < 100; x++) {
			System.out.println(getName() + ":" + x);
		}
	}
}

(2)测试线程类

package cn.itcast_04;

/*
 * public final void join():等待该线程终止。 
 */
public class ThreadJoinDemo {
	public static void main(String[] args) {
		ThreadJoin tj1 = new ThreadJoin();
		ThreadJoin tj2 = new ThreadJoin();
		ThreadJoin tj3 = new ThreadJoin();

		tj1.setName("李渊");
		tj2.setName("李世民");
		tj3.setName("李元霸");

		tj1.start();
		try {
			tj1.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
		tj2.start();
		tj3.start();
	}
}

4、控制线程之礼让线程:public static void yield()

(1)创建线程类

package cn.itcast_04;

public class ThreadYield extends Thread {
	@Override
	public void run() {
		for (int x = 0; x < 100; x++) {
			System.out.println(getName() + ":" + x);
			Thread.yield();
		}
	}
}

(2)测试线程类

package cn.itcast_04;

/*
 * public static void yield():暂停当前正在执行的线程对象,并执行其他线程。 
 * 让多个线程的执行更和谐,但是不能靠它保证一人一次。
 */
public class ThreadYieldDemo {
	public static void main(String[] args) {
		ThreadYield ty1 = new ThreadYield();
		ThreadYield ty2 = new ThreadYield();

		ty1.setName("林青霞");
		ty2.setName("刘意");

		ty1.start();
		ty2.start();
	}
}

5、控制线程之后台线程:public final void setDaemon(boolean on)

(1)创建线程类

package cn.itcast_04;

public class ThreadDaemon extends Thread {
	@Override
	public void run() {
		for (int x = 0; x < 100; x++) {
			System.out.println(getName() + ":" + x);
		}
	}
}

(2)测试线程类

package cn.itcast_04;

/*
 * public final void setDaemon(boolean on):将该线程标记为守护线程或用户线程。
 * 当正在运行的线程都是守护线程时,Java 虚拟机退出。 该方法必须在启动线程前调用。 
 * 
 * 游戏:坦克大战。
 */
public class ThreadDaemonDemo {
	public static void main(String[] args) {
		ThreadDaemon td1 = new ThreadDaemon();
		ThreadDaemon td2 = new ThreadDaemon();

		td1.setName("关羽");
		td2.setName("张飞");

		// 设置收获线程
		td1.setDaemon(true);
		td2.setDaemon(true);

		td1.start();
		td2.start();

		Thread.currentThread().setName("刘备");
		for (int x = 0; x < 5; x++) {
			System.out.println(Thread.currentThread().getName() + ":" + x);
		}
	}
}

6、控制线程之中断线程:public final void stop()  ——>   public void interrupt()

(1)创建线程类

package cn.itcast_04;

import java.util.Date;

public class ThreadStop extends Thread {
	@Override
	public void run() {
		System.out.println("开始执行:" + new Date());

		// 我要休息10秒钟,亲,不要打扰我哦
		try {
			Thread.sleep(10000);
		} catch (InterruptedException e) {
			// e.printStackTrace();
			System.out.println("线程被终止了");
		}

		System.out.println("结束执行:" + new Date());
	}
}

(2)测试线程类

package cn.itcast_04;

/*
 * public final void stop():让线程停止,过时了,但是还可以使用。
 * public void interrupt():中断线程。 把线程的状态终止,并抛出一个InterruptedException。
 */
public class ThreadStopDemo {
	public static void main(String[] args) {
		ThreadStop ts = new ThreadStop();
		ts.start();

		// 你超过三秒不醒过来,我就干死你
		try {
			Thread.sleep(3000);
			// ts.stop();
			ts.interrupt();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

6、线程对象方法

        //启动三个线程
        myThread1.start();
        myThread2.start();
        myThread3.start();

        //线程对象方法汇总
        myThread1.setPriority(1);
        myThread1.getPriority();

        myThread1.start();
        myThread1.run();

        myThread1.getName();
        myThread1.getState();
        myThread1.isAlive();

        myThread1.isDaemon();
        myThread1.setDaemon(true);

        myThread1.toString();
        myThread1.checkAccess();
        myThread1.getStackTrace();
        myThread1.isInterrupted();

        myThread1.join();
        myThread1.join(1000000);
        myThread1.join(1000000, 1000);

        myThread1.getClass();
        myThread1.getId();
        myThread1.getThreadGroup();

        myThread1.setContextClassLoader(c);
        myThread1.getContextClassLoader();

        myThread1.setUncaughtExceptionHandler(ceh);
        myThread1.getUncaughtExceptionHandler();

        //输出主线程名称
        System.out.println(Thread.currentThread().getName());

猜你喜欢

转载自blog.csdn.net/cmm0401/article/details/82316012