【无标题】JavaEE初阶—认识多线程及编写

张开发
2026/4/4 15:53:51 15 分钟阅读
【无标题】JavaEE初阶—认识多线程及编写
一、Java多线程核心理解1.1 什么是多线程⼀个线程就是⼀个 执⾏流. 每个线程之间都可以按照顺序执⾏⾃⼰的代码. 多个线程之间 同时 执⾏多份代码。1.2 为什么要用多线程1.2.1并发编程 成为 刚需.1.单核 CPU 的发展遇到了瓶颈. 要想提⾼算⼒, 就需要多核 CPU. ⽽并发编程能更充分利⽤多核 CPU。2.有些任务场景需要 等待 IO, 为了让等待 IO 的时间能够去做⼀些其他的⼯作, 也需要⽤到并发编程。1.2.2 虽然多进程也能实现 并发编程, 但是线程⽐进程更轻量1.创建线程⽐创建进程更快 2.销毁线程⽐销毁进程更快 3. 调度线程⽐调度进程更快.1.3进程和线程的区别进程是包含线程的. 每个进程⾄少有⼀个线程存在即主线程。进程和进程之间不共享内存空间. 同⼀个进程的线程之间共享同⼀个内存空间.进程是系统分配资源的最⼩单位线程是系统调度的最⼩单位。⼀个进程挂了⼀般不会影响到其他进程. 但是⼀个线程挂了, 可能把同进程内的其他线程⼀起带⾛(整个进程崩溃).二、Java多线程的4种核心实现方式方式1继承Thread核心原理Thread类是Java中线程的基类继承Thread类后重写run()方法线程执行的核心逻辑调用start()方法启动线程注意不能直接调用run()否则就是普通方法调用不会开启新线程。代码示例public static void main(String[] args) { //构造实例 //mythread tnew mythread(); Thread tnew mythread(); t.start(); } } //写一个类继承thrad class mythread extends Thread{ //重写run方法,该线程的入口方法 Override public void run(){ }注意事项Java是单继承继承Thread类后不能再继承其他类。启动线程必须调用start()直接调用run()不会开启新线程只是主线程执行run()方法。方式2实现Runnable接口重写run方法核心原理Runnable接口是Java中的线程任务接口仅包含一个run()方法。实现该接口重写run()方法定义任务再将Runnable对象作为参数传入Thread类调用start()启动线程。优势避免单继承的限制一个类可以同时实现多个接口且任务与线程分离更灵活。代码示例public static void main(String[] args) { Runnable runnablenew mythread1(); //实现runnable接口 Thread tnew Thread(runnable); t.start(); //第二种写法 Thread tnew Thread(new mythread1()); t.start(); //第三种写法 mythread1 mythread1new mythread1(); Thread tnew Thread(mythread1); t.start(); } } class mythread1 implements Runnable{ Override public void run() { }方式3 Lambda表达式Runnable是函数式接口只有一个抽象方法可使用Lambda表达式简化代码无需单独定义实现类public static void main(String[] args) { //lambda表达式 Thread tnew Thread(()-{ while (true){ } }); t.start(); while (true){ System.out.println(这是main线程); try { Thread.sleep(1000); }catch (InterruptedException e){ throw new RuntimeException(); } } }方式4继承Thread重写run并使用匿名内部类public static void main(String[] args) { Thread tnew Thread(){ public void run(){ } }; t.start(); while (true){ System.out.println(这是main线程); try { Thread.sleep(1000); }catch (InterruptedException e){ throw new RuntimeException(); } } }方式5现Runnable重写run使用匿名内部类public static void main(String[] args) { Thread tnew Thread(new Runnable() { Override public void run() { } }); t.start(); while (true){ System.out.println(这是mian线程); try { Thread.sleep(1000); }catch (InterruptedException e){ throw new RuntimeException(); } } }3.1 线程的生命周期Java线程有6种状态定义在Thread.State枚举中生命周期流转如下新建NEW创建线程对象如new Thread()未调用start()。就绪RUNNABLE调用start()后线程进入就绪队列等待CPU调度。运行RUNNINGCPU调度到线程执行run()方法中的逻辑。阻塞BLOCKED线程等待锁如synchronized暂时放弃CPU执行权。等待WAITING调用wait()方法线程进入无期限等待需其他线程唤醒notify()/notifyAll()。终止TERMINATEDrun()方法执行完毕或线程被中断线程生命周期结束。

更多文章