线程的创建
1. 自定义一个类继承Thread类
class MyThread extends Thread {
@Override
public void run() {
while (true) {
System.out.println("hello t");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
2. 实现Runnable接口
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("这里是线程运行的代码");
}
}
Thread t = new Thread(new MyRunnable())
3.使用匿名内部类创建Thread子类对象或Runnable子类对象
// 使用匿名类创建 Thread 子类对象
Thread t1 = new Thread() {
@Override
public void run() {
System.out.println("使用匿名类创建 Thread 子类对象");
}
};
// 使用匿名类创建 Runnable 子类对象
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("使用匿名类创建 Runnable 子类对象");
}
});
4.lambda表达式创建Runnable子类对象
Thread t = new Thread(() -> {
System.out.println("使用匿名类创建 Thread 子类对象");
});
线程中断
一个线程一旦开始运行,除非把线程任务全部执行完,否则该线程是不会自己终止的
1.使用自定义变量
给自定的线程添加一个flag变量,当线程中需要用到循环,用flag作为条件进行判断.当需要线程中断时,外界修改flag的值即可.但是这个变量前需要加上volatile关键字.volatile可以确保
2.使用 Thread.interrupted()方法设置中断标志位
Thread.currentThread().isInterrupted()可以获取当前线程的中断标志位.并且不会清除标志位.并且即使线程处于阻塞状体也会立刻被唤醒设置中断标志位.
线程等待
当我们想要一个线程等待另一个线程执行完毕后再执行.可以使用join()方法.比如想在main里等线程t1先执行, t1.join()即可
线程休眠
获取线程实例
注意上面的isInterrupted()方法只有实例才可以调用.