1.线程和进程的概念
1.1什么是进程?进程是线程的集合,是正在运行的程序,一个进程里面至少有一个线程。
1.2什么是线程?正在独立执行的一条路径。
1.3什么是多线程:就是一个进程里面同时有多个线程运行,多线程是为了提高程序效率。
2.创建线程
2.1. 继承Thread类创建线程
创建一个类继承Thread 类
实现run 接口
在main方法里面 创建子类的对象
调用start 方法,启动线程
继承Thread 类 并实现run方法
class CreateThread extends Thread {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("i:" + i);
}
}
}
在main方法中创建子类对象,调用start方法启动线程
public class ThreadDemo {
public static void main(String[] args) {
CreateThread createThread = new CreateThread();
createThread.start();
for (int i = 0; i < 5; i++) {
System.out.println("main i" + i);
}
}
}
2.2. 实现Runnable接口
创建一个类实现Runnable接口
实现接口的run方法
在main方法里面 创建子类的对象
创建Thread的类,将子类对象作为参数放到Thread类的构造函数里面
调用Thread的start方法 启动线程
创建类实现Runable接口,实现接口中的run方法
class CreateRunnable implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println("子线程 run,i" + i);
}
}
}
创建main函数,创建子类对象,创建Thread类对象,将子类对象作为参数传入,调用Thread类中的start方法启动线程
public class RunnableDemo{
public static void main(String[] args) {
CreateRunnable createRunnble = newCreateRunnable();
Thread thread = new Thread(createRunnble);
thread.start();
for (int i = 0; i < 5; i++) {
System.out.println("主线程:" + i);
}
}
}
2.3 使用匿名内部类创建线程
abstract class Insidedemo {
public abstract void test();
}
public class AnonymousDemo {
public static void main(String[] args) {
Insidedemo insidedemo = new Insidedemo() {
@Override
public void test() {
System.out.println("使用自定义内部类");
}
};
insidedemo.test();
}
}
总结:实现 Runnable 接口 要比继承 Thread 类好点,因为java是面向接口编程的
3.多线程的运行状态
新建
准备
运行
休眠
停止
4.join方法 的使用
join就是让出当前正在运行的线程,让调用join方法的线程先执行完毕,在执行其他线程
创建一个类
创建一个匿名内部类的线程调用Runnable接口
在run 方法里面写一个for循环
在主线程里面写一个for 循环
调用子线程的start 方法,启动线程
在主线程里面先调用子线程的 start方法()在调用子线程的join ()方法,等待子线程执行完毕主线程在运行
如下代码:在主线程里面调用thread 线程的join方法,就会先执行thread 线程里面的 for 循环
public class ThreadDemo01 {
public static void main(String[] args) throws InterruptedException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("子线程运行:" + i);
}
}
});
thread.start();
thread.join();
for (int i = 0; i < 5; i++) {
System.out.println("主线程运行:" + i);
}
}
}