Java多线程(一)线程创建

2019-08-19  本文已影响0人  GIT提交不上

一、基本概念

  1. 原子性:和数据库事务中的原子性一样,满足原子性特性的操作是不可中断的,要么全部执行成功要么全部执行失败。
  2. 可见性:一个线程对变量的值进行了修改,其他线程能够立即得知这个修改。
  3. 有序性:程序执行的顺序按照代码的先后顺序执行。

  线程主要分为五个状态,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所示:

图2-2 运行时数据区.png

三、线程创建

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();
    }
}
上一篇下一篇

猜你喜欢

热点阅读