一、基本概念
- 原子性:和数据库事务中的原子性一样,满足原子性特性的操作是不可中断的,要么全部执行成功要么全部执行失败。
- 可见性:一个线程对变量的值进行了修改,其他线程能够立即得知这个修改。
- 有序性:程序执行的顺序按照代码的先后顺序执行。
线程主要分为五个状态,1)新建 2)可运行 3)正在运行 4)阻塞 5)终止。线程同步机制包括内置锁(synchronized)、显式锁(lock)、volatile类型变量、原子变量。线程状态迁移图如图1-1所示:
图1-1 Java线程状态迁移图二、Java内存模型 & Java内存结构
Java内存模型(Java Memory Model ,JMM)是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。(本地内存 & 主内存)
图2-1 Java内存模型.png
缓存一致性协议:当CPU写数据时,如果发现操作的变量是共享变量,即在其他CPU中也存在该变量的副本,会发出信号通知其他CPU将该变量的缓存行置为无效状态,因此当其他CPU需要读取这个变量时,发现自己缓存中缓存该变量的缓存行是无效的,那么它就会从内存重新读取。(Synchronized、Voliate)
JVM内存结构:由Java虚拟机规范定义,描述的是Java程序执行过程中,由JVM管理的不同数据区域。各个区域有其特定的功能,Java虚拟机运行时数据区如图2-2所示:
三、线程创建
1) 继承Thread类创建线程类
public class HelloWorldBaseThread extends Thread{
private String name;
public HelloWorldBaseThread(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("hello"+this.name);
}
}
/*类分割线*/
public class ThreadTest {
public static void main(String[] args) {
HelloWorldBaseThread t1 = new HelloWorldBaseThread("Thread");
t1.start();
}
}
2) 实现Runnable接口创建线程类
public class HelloWorldBaseRunnable implements Runnable{
private String name;
public HelloWorldBaseRunnable(String name) {
this.name = name;
}
@Override
public void run() {
System.out.println("hello" + this.name);
}
}
/*类分割线*/
public class RunnableTest {
public static void main(String[] args){
Thread t1 = new Thread(new HelloWorldBaseRunnable("Runnable"));
t1.start();
}
}
网友评论