Java知识点6——线程、同步

文章目录

  • 1 线程
    • 1.1 多线程原理
    • 1.2 Thread类
    • 1.3 创建线程方式二
    • 1.4 Thread和Runnable的区别
    • 1.5 匿名内部类方式实现线程的创建
  • 2 线程安全
    • 2.1 线程安全
    • 2.2 线程同步
    • 2.3 同步代码块
    • 2.4 同步方法
    • 2.5 Lock锁
  • 3 线程状态
    • 3.1 线程状态概述
    • 3.2 Timed Waiting(计时等待)
    • 3.3 BLOCKED(锁阻塞)
    • 3.4 Waiting(无限等待)
    • 3.5 补充知识点

1 线程

1.1 多线程原理

分析执行流程

自定义线程类

public class MyThread extends Thread{
     
	/*
	* 利用继承中的特点
	* 将线程名称传递 进行设置
	*/
	public MyThread(String name){
     
		super(name);
	}
	/*
	* 重写run方法
	* 定义线程要执行的代码
	*/
	public void run(){
     
		for (int i = 0; i < 20; i++) {
     
			//getName()方法 来自父亲
			//getName()方法 来自父亲
			System.out.println(getName()+i);
		}
	}
}

测试类

public class Demo {
     
	public static void main(String[] args) {
     
		System.out.println("这里是main线程");
		MyThread mt = new MyThread("小强");
		mt.start();//开启了一个新的线程
		for (int i = 0; i < 20; i++) {
     
			System.out.println("旺财:"+i);
		}
	}
}

流程图

Java知识点6——线程、同步_第1张图片
程序启动运行main时候,java虚拟机启动一个进程,主线程main在main()调用时候被创建。随着调用mt的对象的start方法,另外一个新的线程也启动了,这样,整个应用就在多线程下运行。
通过这张图我们可以很清晰的看到多线程的执行流程,那么为什么可以完成并发执行呢?我们再来讲一讲原理。

多线程执行时,到底在内存中是如何运行的呢?以上个程序为例,进行图解说明:

多线程执行时,在栈内存中,其实每一个执行线程都有一片自己所属的栈内存空间。进行方法的压栈和弹栈。

Java知识点6——线程、同步_第2张图片
当执行线程的任务结束了,线程自动在栈内存中释放了。但是当所有的执行线程都结束了,那么进程就结束了。

1.2 Thread类

在我们完成操作过程中用到了 java.lang.Thread 类,API中该类中定义了有关线程的一些方法,具体如下

1.3 创建线程方式二

1.4 Thread和Runnable的区别

1.5 匿名内部类方式实现线程的创建

2 线程安全

2.1 线程安全

2.2 线程同步

2.3 同步代码块

2.4 同步方法

2.5 Lock锁

3 线程状态

3.1 线程状态概述

3.2 Timed Waiting(计时等待)

3.3 BLOCKED(锁阻塞)

3.4 Waiting(无限等待)

3.5 补充知识点

你可能感兴趣的:(java知识点系列,java)