java 多线程

大多数高级Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要的。下面我们一起学习一下java多线程方面的知识。

线程安全到底在说什么?

多线程编程中有三个核心概念,把握住这三个核心概念,以此为脉络来学习多线程的知识,是一个不错的方法。三个核心概念分别是可见性、原子性、顺序性。所以我们讨论线程安全的问题,基本围绕这三个概念来展开的,下面我们看下这三个概念。

可见性

可见性是指,当多个线程并发访问共享变量时,一个线程对共享变量的修改,其它线程能够立即看到。CPU从主内存中读数据的效率相对来说不高,现在主流的计算机中,都有几级缓存。每个线程读取共享变量时,都会将该变量加载进其对应CPU的高速缓存里,修改该变量后,CPU会立即更新该缓存,但并不一定会立即将其写回主内存(实际上写回主内存的时间不可预期)。此时其它线程(尤其是不在同一个CPU上执行的线程)访问该变量时,从主内存中读到的就是旧的数据,而非第一个线程更新后的数据。这一点是操作系统或者说是硬件层面的机制,所以很多应用开发人员经常会忽略,这个问题是很多开发人员忽略或者理解错误的一点。

原子性

是指一个操作多含多条指令,要么全部执行,要么全部都不执行。这一点,跟数据库事务的原子性概念差不多。举个例子就是银行转账就需要操作的原子性。

顺序性

顺序性指的是,程序执行的顺序按照代码的先后顺序执行。在Java内存模型中,允许编译器和处理器对指令进行重排序,但是重排序过程不会影响到单线程程序的执行,却会影响到多线程并发执行的正确性。所以多线程操作,就带来了一些顺序性的问题。

java创建线程

创建线程java有四种方法,下面我们详细看一下如何实现。

继承thread类

你可能感兴趣的:(java 多线程)