一、线程休眠
public class Main{
public static void main(String[] args) throws InterruptedException{
//线程的休眠 sleep
for(int i = 0; i < 10; i++){
System.out.println(i);
Thread.sleep(millis:1000);
}
}
}
二、线程阻塞,也称为耗时操作
简单理解为所有比较消耗时间的操作,例如:接收用户输入、文件读取。
三、线程的中断
public class Main{
public static void main(String[] args) throws InterruptedException{
//线程的中断
// 一个线程是一个独立的执行路径,它是否应该结束由其自身决定
Thread t1 = new Thread(new MyRunnable());
t1.start();
for (int i = 0; i <= 6; i++){
System.out.println(Thread.currentThread().getName()+":"+i);
try {
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
}
// 给线程t1添加中断标记
t1.interrupt();
}
static class MyRunnable implements Runnable{
@Override
public void run(){
for (int i = 0; i <= 10; i++){
System.out.println(Thread.currentThread().getName()+":"+i);
try {
Thread.sleep(1000);
}catch (InterruptedException e){
//e.printStackTrace();
System.out.println("发现了中断标记,我们这个线程自杀");
return;
}
}
}
}
}
四、守护线程
线程分为守护线程和用户线程:
用户线程:当一个进程不包含任何存活的用户线程时,进行结束
守护线程:守护用户线程,当最后一个用户线程结束时,所有守护线程自动死亡。
public class Main{
public static void main(String[] args) throws InterruptedException{
//线程的中断
// 一个线程是一个独立的执行路径,它是否应该结束由其自身决定
Thread t1 = new Thread(new MyRunnable());
// 设置为守护线程
t1.setDaemon(true);
t1.start();
for (int i = 0; i <= 6; i++){
System.out.println(Thread.currentThread().getName()+":"+i);
try {
Thread.sleep(1000);
}catch (InterruptedException e){
e.printStackTrace();
}
}
// 给线程t1添加中断标记
t1.interrupt();
}
static class MyRunnable implements Runnable{
@Override
public void run(){
for (int i = 0; i <= 10; i++){
System.out.println(Thread.currentThread().getName()+":"+i);
try {
Thread.sleep(1000);
}catch (InterruptedException e){
//e.printStackTrace();
System.out.println("发现了中断标记,我们这个线程自杀");
return;
}
}
}
}
}