编程第五周的日常<二>

多线程

定义:简单的说,当程序同时完成多见事情时,就是所谓的多线程程序。(基于并发的思想)

1 进程和线程

进程 -process- 进程是操作系统分配内存的基本单位
线程 -thread- 最小的执行单元 [操作系统分配CPU资源的基本单位]
一个进程通常包含了一个主线程或多个线程

2 Java中创建线程的三种方式

(1) 继承Thread类并重写run()方法
(2) 实现Runnable接口并重写run()方法,在这中可以使用Lambda表达式。- 推荐使用
(3) 实现一个Callable接口并重写Call()方法

3 线程使用中的注意事项

(1) 启动线程需要调用start()方法,start()方法调用被覆盖的run()方法,如果不调用strat()方法,线程永远都不会启动。
(2) 三种实现了Runnable接口的线程的启动方式:
<1> new Thread(实现了Runnable接口的对象).start;
<2> 匿名内部类
new Thread(new Runnable(){
@Override
}).start;
<3> Lambda表达式
new Thread(() ->{
--写方法
}).start;

4 线程的基本状态以及状态之间的关系

5 Synchronized的两种用法

<1> 放在方法前面只允许抢占到对象锁的线程进入执行
<2> 构造一个同步代码块只允许抢占到对象锁的线程进入执行
<3>注意:没有抢占到对象锁的线程在系统自动维护的等待池中等待;如果抢占到锁的线程释放了对象锁,那么这些等锁的线程就会自动抢锁;谁抢占到了锁,谁就进入同步代码块中执行,没有抢到锁的继续等待;基于Synchronized的锁机制是可重入的锁机制。
<4> 锁主要是为了锁住资源,不让多个线程同时抢占一个资源,防止出错。

线程池

<1> 是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。
<2> 装潢模式的应用 - 将线程不安全的容器包装成线程安全的容器。 如果可以的话,尽可能的不使用隐式锁机制(synchronized关键字)或是显式(explicit)Lock接口的锁机制因为他们会把并行的(并发)的程序变成串行执行的程序,这样会让程序的性能受到严重的影响。 一种常见的解决方案是为每个线程创建资源的副本,每个资源操作自己的副本,而不是同步操作同一个副本。 这又是典型的使用空间换时间的策略。

你可能感兴趣的:(编程第五周的日常<二>)