java 线程总结

来源:互联网 发布:mysql 禁止删除数据 编辑:程序博客网 时间:2024/06/06 01:20

1 进程是一个独立的程序

2 线程 是程序中的一条执行路径

3 多线程 多个线程同时执行,每一个线程执行的任务叫做线程任务

4 真正来说 cpu不是同时执行多个线程,而是每一个线程都有可能抢占到cpu的时间片段

5 cpu 执行时间是随机的(多线程执行的时候是随机的)

6 多线程的特点:随机的,宏观意义上是同步的,微观意义上是一个一个执行的,多核除外

7 线程的创建方式有两种   :1  继承Thread 不涉及资源共享的问题  2 实现Runnable接口 如果操作不相同 创建资源共享类 还需要创建不同的操作类,分别去实现

8 进程与线程的区别  1:进程是独立的程序   线程是进程中的一条执行路径   2:进程包含着线程 3进程在整个电脑中有着独立的内存空间,即使是关闭或者意外退出,都不会影响其他的进程        线程是进程中的一个执行路径,当线程停止或者是意外停止,有可能影响到其他的线程  4 一个进程至少要有一个线程

9:多线程的作用:1 执行效率高   2 节省资源,提高资源的利用率

10 当启动一个子线程,这个子线程会开辟一个新的栈内存空间(多了一条执行路径)

11 sleep 和 yield 的区别  1.sleep的当前线程进入到了阻塞状态  yield 的当前线程进入到了可执行状态 。 2 sleep了当前线程,其他线程可以直接去抢占cpu资源,(所有线程机会均等) yield 了当前进程,所有的线程包括自己都会去抢占cpu资源(优先级高的抢到的几率比较大)  3 sleep如果只有当前线程,也必须等到睡眠时间结束才能够执行,yield如果只有当前线程,yield以后立即去执行当前线程

12 启动线程有两种方式: start()使用start()启动线程的时候 启动了一个新的子线程,子线程开辟了新的栈空间,可以和其他的线程抢占cpu的执行时间片段

 run()可以将run方法中的代码执行,但是没有开辟新的子线程,没有开辟新的栈空间,所有代码都在主线程中执行

13 优先级  Priority  优先级从1-10 数字越大优先级越高,默认的优先级是5,优先级高的线程能够抢占的cpu几率大。setPriority(int)设置优先级

14  join() 加入(插队的功能)
当前线程正在执行,如果有其他的线程调用了join方法,就会执行调用join方法的线程,当前线程要进入到等待状态。
当调用了join()方法的线程执行完毕,当前线程才能执行。
15  线程的生命周期
有五种状态: 分别是  新建 , 就绪,运行,阻塞,死亡。
新建:
当创建了线程对象
就绪: 当调用了start()方法 此线程不一定能偶直接抢占到cpu资源,当没有抢到 cpu资源时,此线程是可执行状态,也就是就绪状态。
运行:  当就绪状态的的线程抢占到了cpu资源 ,就是运行状态
(运行状态的线程,被别人抢占了cpu资源,此线程就进入到了就绪状态,比如调用了yield方法)
阻塞: 当调用sleep方法的时候  此线程就进入到阻塞状态。
  当指定睡眠时间结束的时候, 此线程进入到就绪状态。
死亡: 当线程执行完毕或者是异常情况下退出,线程就进入到了死亡状态
16 结束线程的方式 
1> 通过标记的方式。
2> 通过调用stop()  不推荐使用   有可能执行不到指定的代码。
3> 当进入到阻塞状态时,想打断线程,需要抛出异常来结束线程。
可以通过调用 interrupt方法来抛出异常

package com.qf.demo;import java.io.IOException;/* * interrupt  可以通过抛出异常的方式 阻断线程的执行 *  * 当 线程进入到   sleep() 进入到阻塞状态的时候, 如果想要结束 可以通过 interrupt方法 *  *  * 需求: 当输入任意字符  将线程打醒 *  *  *  */public class Test12 {public static void main(String[] args) throws IOException {MyThread3 thread3 = new MyThread3();thread3.start();// 读取键盘输入的任意字符System.in.read();// 打断子线程的执行thread3.interrupt();System.out.println("主线程也执行完毕");}}class MyThread3 extends Thread{@Overridepublic void run() {System.out.println("子线程进入睡眠状态");try {Thread.sleep(10000);System.out.println("睡到自然醒");} catch (InterruptedException e) {System.out.println("被打醒的");}}}


0 0
原创粉丝点击