并发并行多线程并发问题线程安全问题

1.并行(多个线程).

2.并发(一个线程也可以,指的是指的是 一个线程或多个线程上,多个程序之间的多路复用,即看起来是同时)
redis就是这种技术,单线程+多路IO复用

3.我们通常说的并发,就是指的 并行,

4.单线程处理多个请求,指的是并发,单线程是不存在 共享资源的,本来就只有一个线程,而且单个线程是不存在,线程安全问题的

5.多线程,才有共享资源,而共享资源是,多线程安全问题的前提

6.线程安全 是什么? 是 针对 一段代码,一个线程 每次执行 它 都会得到不同的 “结果”

6.线程安全的前提:
1.共享资源,
2.此次操作不是原子性的,
3.多线程不是单线程,
4.多个线程执行同一段代码(不是多个线程执行不同的代码,或者说根本不用考虑 不同的代码 也能拿到 共享资源了)
5.这4点必须全部满足才能达到我们需要考虑线程安全

7.线程安全问题,原本就是可能(但在 高并发中,可能 就是 一定,只要有一次,我们都得解决)

8.共享资源,在一个线程的原子性操作它时,不能被其他线程的操作拿到,即共享资源,一次只能被一个原子操作拿到,也可以说 共享资源 一次 在 一个时刻,只能被一个线程拿到,这两种理解都对,

9.上面说的 多个线程执行同一段代码(不是多个线程执行不同的代码),
实际上,如果你看这段代码,如果是原子性的,那么 这段代码,涉及的共享资源,不会被任何线程执行 任何代码(就算执行的就是这段代码)拿到,那么是不是 多个线程执行同一段代码都无所谓了,

但是,如果这段代码不是原子性的,那么 多个线程执行 这同一段代码本身就会出现 不是原子性操作,导致可以被 这段不是原子性操作开始到结束之间的 线程前后拿到,

所以,只要这个操作是原子性的(不用任何考虑说,是这同一段代码或其他代码 都不可能拿到 这个共享资源),只要这个操作不是原子性的,那同一段代码就会涉及 线程安全问题,同样也不用去考虑其他不同的代码了

9.所以,当我们遇到线程安全问题的时候,都是,多个线程 在 (同一段代码)一个 不是原子性的操作中,可能 在这个操作开始到结束之间,多个线程 会先后拿到这个共享资源并操作,导致线程线程安全问题

8.同步锁 和 原子性是有区别的,

你可能感兴趣的:(安全,java,redis)