版权声明:本文为博主原创文章,未经博主允许不得转载。 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());