前言
多线程:指的是这个程序(一个进程)运行时产生了不止一个线程
并行和并发:
- 并行:多个cpu实例或者多台机器同时执行一段处理逻辑,是真正的同时。
- 并发:通过cpu调度算法,让用户看上去同时执行,实际上从cpu操作层面不是真正的同时。并发往往在场景中有公用的资源,那么针对这个公用的资源往往产生瓶颈,我们会用TPS或者QPS来反应这个系统的处理能力。
线程创建
最基础的主要分为两种方法
- 继承Thread类
- 实现Runnable接口
创建Thread类的子类
用这种方法生成新线程,可以按以下步骤进行:
- 定义Thread类的子类
class MyThread extends Thread
- 在子类中重写run方法
- 实例化MyThread,调用start方法开始运行
实例:
public class test1 {
public static void main(String[] argv){
testThread t1 = new testThread();
t1.start();
while(true){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread 2");
}
}
}
class testThread extends Thread{
public void run(){
while(true){
try {
sleep(1);
}catch (Exception e){
System.out.println(e.getMessage());
}
System.out.println("Thread 1");
}
}
}
实现Runnable接口
- 定义一个类MyThread实现Runnable接口
- 实现他的唯一的抽象函数run()
- 实例化MyThead
- 再实例化Thread(MyThread,name)
- 调用start方法
// 用runnable构造线程
public class Book2 {
public static void main(String[] argv){
System.out.println("开始");
MyThread2 m1,m2,m3;
Thread t1,t2,t3;
m1 = new MyThread2(2,70);
m2 = new MyThread2(3,70);
m3 = new MyThread2(5,70);
t1 = new Thread(m1,"A");
t2 = new Thread(m2,"B");
t3 = new Thread(m3,"C");
t1.start();
t2.start();
t3.start();
System.out.println("当前共有"+Thread.activeCount()+"个线程");
System.out.println("Main结束");
}
}
class MyThread2 implements Runnable