博主主页: 码农派大星.
数据结构专栏:Java数据结构
数据库专栏:MySQL数据库
JavaEE专栏:JavaEE
关注博主带你了解更多数据结构知识
⼀个线程就是⼀个 "执⾏流". 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 "同时" 执⾏ 着多份代码
通过写特殊的代码,把多个cpu核心,都能利用起来,这样的代码就叫并发编程.
多进程编程就是一种典型的并发编程.
虽然多进程能够解决问题,但随着对效率的要求越来越高,就希望出现更好的方式来实现并发编程.
多进程的缺点就是太"重".
创建进程,销毁进程(最典型就是服务器开发),开销都比较大(时间,空间).
虽然多进程也能实现 并发编程, 但是线程⽐进程更轻量.
• 创建线程⽐创建进程更快.
• 销毁线程⽐销毁进程更快.
• 调度线程⽐调度进程更快
线程虽然⽐进程轻量, 但是⼈们还不满⾜, 于是⼜有了 "线程池"(ThreadPool) 和 "协程" (Coroutine)
• 进程是包含线程的. 每个进程⾄少有⼀个线程存在,即主线程。
• 进程和进程之间不共享内存空间. 同⼀个进程的线程之间共享同⼀个内存空间.
• 进程是系统分配资源的最⼩单位,线程是系统调度的最⼩单位。
• ⼀个进程挂了⼀般不会影响到其他进程. 但是⼀个线程挂了, 可能把同进程内的其他线程⼀起带⾛(整个进程崩溃).
线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对⽤⼾层提供了⼀些 API 供⽤⼾ 使⽤(例如 Linux 的 pthread 库).
Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进⾏了进⼀步的抽象和封装.
继承 Thread 来创建⼀个线程类.
- class MyThread extends Thread{
- @Override
- public void run() {
- //这里就是即将创建线程,要执行的逻辑
- System.out.println("hello,Thread!");
- }
- }
- public class Demo1 {
- public static void main(String[] args) {
- MyThread t = new MyThread();
- //创建线程
- t.start();
- }
- }
创建 MyThread 类的实例
MyThread t = new MyThread();
调⽤ start ⽅法启动线程
t.start();
实现 Runnable 接⼝
- class MyRunnable implements Runnable{
- @Override
- public void run() {
- System.out.println("hello Runnable!");
- }
- }
- public class Demo2 {
- public static void main(String[] args) {
- MyRunnable runnable = new MyRunnable();
- Thread t = new Thread(runnable);
- t.start();
- }
- }
创建 Thread 类实例, 调⽤ Thread 的构造⽅法时将 Runnable对象作为 Thread 参数.
Thread t = new Thread(runnable);
调⽤ start ⽅法
t.start();
匿名内部类创建 Thread ⼦类对象
- public class Demo3 {
- public static void main(String[] args) {
- Thread t = new Thread(){
- @Override
- public void run() {
- while (true){
- System.out.println("hello Thread!");
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- };
- t.start();
- }
- }