17. 多线程

1. 进程与线程:

进程和程序对应的。打开程序的时候就会开启至少一个进程。存的代码:: 资源内存

线程: cpu运行线程,线程访问进程上的资源。

2. 如何开启线程

第一种:

  1. 实现Runnable接口, 覆盖run方法。

  2. 实例化Thread类,通过构造放入runable.。

  3. 调用start()启动线程

第二种:

  1. 继承Thread类, 覆盖run方法。

开发用第一种: 单继承多实现

3. 线程方法

Thread.currentThread(): 获取当前线程对象

Thread.yield(); 从运行状态进入 等待运行状态

Thread.sleep(long ): 线程睡眠

t1.setPriority(int ): 优先级优先级,保证概率性的。高级先结束。

t1.setDaemon(boolean ): 设置守护线程, 创建者结束,线程就结束了

t2.join(); 把t2加入到当前线程中。t2先运行完之后再继续t1运行。

在这里插入图片描述

synchronized关键字: 同步锁

  • 场景: 多个线程访问同一数据的时候可能产生线程安全问题。 (数据:锁的是对象的属性。)
  • 同步锁会影响效率。
    • StringBuffer线程安全,慢, StringBuilder 线程不安全,快
  • 语法: 1. 修饰方法 2. 修饰代码块
	public synchronized void add() {
		count = count + 1;
		System.out.println(Thread.currentThread().toString() + count);
	}
	public void substract() {
		synchronized(this) {
			count = count - 1;
			System.out.println(Thread.currentThread().toString() + count);
		}
	}
  • Object wait() : 线程进入等待池。
  • Object notify(); 等待池随机一个线程回到 可运行状态
  • Object notifyAll(); 等待池所有线程回到 可运行状态

六态图:

在这里插入图片描述


行状态

六态图:

[外链图片转存中…(img-Ci7X6orE-1618116205381)]


posted @ 2021-04-11 12:45  剑心空明  阅读(0)  评论(0编辑  收藏  举报  来源