1.线程简介
线程和进程
* 进程:一个正在运行的程序,就是一个进程
* 线程:一个进程中 有很多个线程
* (每一线程相当于一个执行的任务)
*
* 开启一个线程相当于开启了CPU的一个执行路径(相对独立)
* CPU在执行多个线程的时候 是随机的 跟线程的优先级有关
* 分时调度 cpu会在多个线程中 进行随机切换
2.实现线程的方法
在Java中主要提供了方式实现线程,分别为继承java.lang.Thread类与实现java.lang.Runnable接口
Thread线程类(开辟一个子线程)
*1.创建一个Thread类的子类
*2.重写run方法
* run方法 就是你要线程执行的代码
* 3.调用start代码 开启线程(不能重复调用)
class SubTread extends Thread {
// 重写run方法
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println("run-----" + i);
}
// 子线程执行的代码
System.out.println("我是子线程");
}
public static void main(String[] args) {
// 创建一个子线程
//开启多个线程时 多个线程会同时执行
//并且是相对的独立的执行单元
SubTread subTread = new SubTread();
// 开启线程,调用start方法
subTread.start();
}
2.2实现Runnable接口
1.建立Runnable对象
2.使用参数为Runnable对象的构造方法创建Thread实例
3.调用start方法启动线程
public static void main(String[] args) {
//该方式也能 创建一个子线程
//创建接口的实现类对象
RunnableImpl runnableImpl = new RunnableImpl();
//创建一个线程类对象
Thread thread = new Thread(runnableImpl);
//开启线程
//thread.start();
}
}
//创建一个类 实现Runnable接口
class RunnableImpl implements Runnable{
//测试该方法能不能执行 是不是在子线程中执行
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+"--"+i);
}
}
3.匿名内部类实现多线程
匿名内部类的方式创建线程
直接创建接口类的实现类对象
注意:这种方式,new跟的是父类名,但创建出来的却是子类或实现类的对象
匿名内部类创建出来的对象 是该类的子类对象
// 方式1(用Thread子类的方式)
Thread thread = new Thread() {
@Override
public void run() {
System.out.println("子线程执行的方法");
}
};
thread.start();
// 方式2(接口实现的方式)
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("子线程的方法");
}
};
Thread thread2 = new Thread(runnable);
thread2.start();
// 方式3 把方式2的两步写一起
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子线程的方法");
}
});
4.线程的生命周期