一:线程和进程
1.1:线程和进程的概述
1. 进程:是内存中运行的一个个软件(比如:QQ, 微信)。
2. 线程:进程内部的一个独立执行单元。堆空间共享,栈空间是独立。
1.2:并发和并行的概述
1. 并行:在一个时间点同时发生多个事件。
2. 并发:在同一个时间段同时发生多个事件。
二:多线程实现
2.1:继承Thread类
代码的具体实现
public class MyThread extends Thread{
/*
* 利用继承中的特点
* 将线程名称传递 进行设置
*/
public MyThread(String name){
super(name);
}
/*
* 重写run方法
* 定义线程要执行的代码
*/
public void run(){
for (int i = 0; i < 20; i++) {
//getName()方法 来自父亲
System.out.println(getName()+i);
}
}
}
public class Demo {
public static void main(String[] args) {
System.out.println("这里是main线程");
MyThread mt = new MyThread("小强");
mt.start();//开启了一个新的线程
for (int i = 0; i < 20; i++) {
System.out.println("旺财:"+i);
}
}
}
2.2:实现Runnable接口
- 基本实现
public class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
public class Demo {
public static void main(String[] args) {
//创建自定义类对象 线程任务对象
MyRunnable mr = new MyRunnable();
//创建线程对象
Thread t = new Thread(mr, "小强");
t.start();
for (int i = 0; i < 20; i++) {
System.out.println("旺财 " + i);
}
}
}
- 匿名内部类
public static void main(String[] args) {
//使用匿名内部类方式创建Runnable实例
Thread t1 = new Thread(new Runnable(){
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
System.out.println("输出"+i);
}
}
});
t1.start();
// lambda 表达式简化语法
Thread t2 = new Thread(()->{
for (int i = 0; i < 1000; i++) {
System.out.println("输出"+i);
}
});
t2.start();
}
2.3:实现Callable接口
/**
* 实现Callable的接口
* 实现一个带返回值的任务
* @创建日期 2020/3/18 15:31
**/
public class Thread03_create03 {
public static void main(String[] args) {
//FutureTask包装我们的任务