Java——线程

Thread类

线程安全

如果有多个线程在同时运行,而这些线程可能会同时运行这段代码。程序每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期是一样的,就是线程安全的

多线程访问了共享的数据,就会产生线程安全问题

线程同步:
  1. 同步代码块
    synchronized关键字可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问
synchronized(同步锁) { 代码块 }

同步锁可以使用任意类型,多个线程要使用同一把锁

  1. 同步方法
    使用synchronized修饰的方法就叫做同步方法,保证A线程执行该方法的时候,其他线程只能在方法外等待
    对于非静态方法,同步锁是this
    对于静态方法,使用当前方法所在类的字节码对象作为同步锁
  2. 锁机制 java.util.concurrent.locks.Lock
    lock() 加同步锁
    unlock() 释放同步锁
    java.util.concurrent.locks.ReentraitLock implements Lock
线程状态:
  • NEW 新建态
    线程刚刚被创建,但是并未启动,还没调用 start() 方法
  • Runnable 可运行态
    线程可以在jvm中运行的状态,可能正在执行代码,也可能没有,这取决于cpu调度
  • Blocked 锁阻塞态
    当一个线程试图获取锁对象,而该锁对象被其他线程所持有的,则该线程进入Blocked状态;当该线程持有锁对象时,该线程将变成Runnable状态
  • Waiting 无限等待态
    一个线程在等待另一个线程执行一个(唤醒)动作时,该线程进行Waiting状态。进入这个状态后是不能自动唤醒的,必须等待另一个线程调用notify或者notifyAll方法才能够唤醒
  • Timed Waiting 计时等待态
    同Waiting状态,有几个方法有超时参数,调用它们将进入Timed Waiting状态。这一状态将一直保持到超时期满或者接收到唤醒通知。带有超时参数的常用方法有Thread.sleep, Object.wait
  • Terminated 死亡态
    run方法执行完成或者调用stop方法后,线程进入Terminated状态
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。