1 进程是一个独立的程序
2 线程 是程序中的一条执行路径
3 多线程 多个线程同时执行 每一个线程执行的任务叫做线程任务
4 真正来说 cpu 不是同时执行的多个线程,而是每一个线程都有可能抢占到cpu的时间片段
5 cpu执行时间是随机(多线程执行时随机的)
6 多线程的特点:
随机的
宏观意义上时同步的 ,微观意义上是一个一个执行的
多核除外
7 线程的创建方式有两种
1 继承Thread
不涉及到资源共享问题
2 实现Runnable 接口
设计到资源共享问题的时候
如果操作相同 共享资源类去 实现runnable接口
如果操作不相同 创建资源共享类 还需要创建不同操作的类 分别去实现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 ) 设置优先级
getPriority() 得到当前线程的优先级
14 join() 加入(插队的功能)
当前线程正在执行,如果有其他的线程调用了join方法,就会执行调用join方法的线程,当前线程要进入到等待状态。
当调用了join()方法的线程执行完毕,当前线程才能执行。
15 线程的生命周期
有五种状态: 分别是 新建 , 就绪,运行,阻塞,死亡。
新建:
当创建了线程对象
就绪: 当调用了start()方法 此线程不一定能偶直接抢占到cpu资源,当没有抢到 cpu资源时,此线程是可执行状态,也就是就绪状态。
运行: 当就绪状态的的线程抢占到了cpu资源 ,就是运行状态
(运行状态的线程,被别人抢占了cpu资源,此线程就进入到了就绪状态,比如调用了yield方法)
阻塞: 当调用sleep方法的时候 此线程就进入到阻塞状态。
当指定睡眠时间结束的时候, 此线程进入到就绪状态。
死亡: 当线程执行完毕或者是异常情况下退出,线程就进入到了死亡状态
16 结束线程的方式
1> 通过标记的方式。
2> 通过调用stop() 不推荐使用 有可能执行不到指定的代码。
3> 当进入到阻塞状态时,想打断线程,需要抛出异常来结束线程。
可以通过调用 interrupt方法来抛出异常。
2 线程 是程序中的一条执行路径
3 多线程 多个线程同时执行 每一个线程执行的任务叫做线程任务
4 真正来说 cpu 不是同时执行的多个线程,而是每一个线程都有可能抢占到cpu的时间片段
5 cpu执行时间是随机(多线程执行时随机的)
6 多线程的特点:
随机的
宏观意义上时同步的 ,微观意义上是一个一个执行的
多核除外
7 线程的创建方式有两种
1 继承Thread
不涉及到资源共享问题
2 实现Runnable 接口
设计到资源共享问题的时候
如果操作相同 共享资源类去 实现runnable接口
如果操作不相同 创建资源共享类 还需要创建不同操作的类 分别去实现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 ) 设置优先级
getPriority() 得到当前线程的优先级
14 join() 加入(插队的功能)
当前线程正在执行,如果有其他的线程调用了join方法,就会执行调用join方法的线程,当前线程要进入到等待状态。
当调用了join()方法的线程执行完毕,当前线程才能执行。
15 线程的生命周期
有五种状态: 分别是 新建 , 就绪,运行,阻塞,死亡。
新建:
当创建了线程对象
就绪: 当调用了start()方法 此线程不一定能偶直接抢占到cpu资源,当没有抢到 cpu资源时,此线程是可执行状态,也就是就绪状态。
运行: 当就绪状态的的线程抢占到了cpu资源 ,就是运行状态
(运行状态的线程,被别人抢占了cpu资源,此线程就进入到了就绪状态,比如调用了yield方法)
阻塞: 当调用sleep方法的时候 此线程就进入到阻塞状态。
当指定睡眠时间结束的时候, 此线程进入到就绪状态。
死亡: 当线程执行完毕或者是异常情况下退出,线程就进入到了死亡状态
16 结束线程的方式
1> 通过标记的方式。
2> 通过调用stop() 不推荐使用 有可能执行不到指定的代码。
3> 当进入到阻塞状态时,想打断线程,需要抛出异常来结束线程。
可以通过调用 interrupt方法来抛出异常。