Skip to the content.

线程、进程

进程是资源分配的最小单位,线程是CPU调度的最小单位。

进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。

Java中线程的实现方式

  1. Thread 类和 Runnable 接口
  2. java.util package
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    

线程的状态变化

任何线程一般具有5种状态,即创建,就绪,运行,阻塞,终止。

同步以及死锁

一个多线程的程序如果是通过 Runnable 接口实现的,则意味着类中的属性被多个线程共享,那么这样就会造成一种问题, 如果这多个线程要操作同一个资源时就有可能出现资源同步问题。

解决方法

1. 同步代码块

 synchronized(同步对象){ 
  需要同步的代码 
 }

2. synchronized 关键字声明同步方法

死锁

同步可以保证资源共享操作的正确性,但是过多同步也会产生问题。例如,现在张三想要李四的画,李四想要张三的书,张三对李四说“把你的画给我,我就给你书”,李四也对张三说“把你的书给我,我就给你画”两个人互相等对方先行动,就这么干等没有结果,这实际上就是死锁的概念。

所谓死锁,就是两个线程都在等待对方先完成,造成程序的停滞,一般程序的死锁都是在程序运行时出现的。

发生死锁的时候,代码不再执行,程序进入死锁状态。