java多线程基础1:入门

对于计算机来说每一个任务就是一个进程process,在每一个进程内部至少有一个线程Thread是在运行中。

java的线程声明周期分为五个阶段:

(1)线程的new状态;

(2)线程的Runnable状态;

(3)线程的running状态;

(4)线程的blocked状态;

(5)线程的terminated状态;

    java中创建线程只有一种方式:构造Thread类。而要实现线程的执行单元则有两种方式:一种是重写Thread的run方法,第二种就是实现Runnable接口的run方法,并且将Runnable实例作构造Thread的参数。线程的执行单元就是run方法,可以通过继承Thread重写run方法实现自己的业务逻辑,也可以实现Runnable接口实现自己的业务逻辑。

一个线程的创建肯定是由另外一个线程完成的;被创建线程的父线程是创建它的线程。

Thread负责线程本身相关的职责和控制,而Runnable则负责执行逻辑单元的部分。

【Thread类的run方法和实现Runnable接口的方法的不同?】

Thread类的run方法不能共享的,也就是说A线程不能把B线程的run方法当作自己的执行执行单元,而使用Runnable接口则很容易就能实现这一点,使用同一个Runnable的实例构造不同的Thread实例。

1、synchronized关键字

     synchronized关键字可以实现一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象多线程是可见,那么该对象的所有读或者写都将通过同步的方式类进行。表现如下:

(1)synchronized关键字提供了一种锁的机制,能够确保共享变量的互斥访问,从而防止数据不一致问题的出现。

(2)synchronized关键字包括monitor enter和 monitor exit两个JVM指令,它能够保证在任何时候任何线程执行行到monitor enter成功之前都必须从主内存中获取数据,而不是从缓存中,在monitor exit运行成功之后,共享变量被更新后的值必须刷入主内存。

(3)synchronized的指令严格遵守java happens-before规则,一个monitor exit指令之前必定有一个monitor enter。

1.1、synchronized关键字用法

     synchronized可以用于对代码块或方法进行修饰,而不能用于对class类及变量进行修饰

【同步方法】

同步方法语法非常简单:[default|public|private|protected]   synchronized   [static]    type 

【】synchronized作用域太大]

 由于synchronized关键字存在排他性,也就是说所有的线程必须串行地经过synchronized保护的共享区域,如果synchronized作用域越大,则表示其效率越低,甚至会丧失并发的优势。

猜你喜欢

转载自blog.csdn.net/u013089490/article/details/87988519