首页 > 代码库 > java进程和线程

java进程和线程

一、进程和线程的区别

1,进程和线程都有三种基本状态:就绪,运行,阻塞

2,从资源的角度讲:进程是拥有资源的基本单位,线程可以共享其隶属进程的系统资源。

3,从调度的角度讲:线程是cpu调度的基本单位。

4,从系统开销的角度讲:进程由程序、数据、进程控制块三部分组成。每次创建进程,系统都要为之分配或回收资源,如内存、io等。

线程由线程ID、当前指令指针、寄存器集合和堆栈等组成,线程切换只需要保存和设置少量寄存器变量,因此系统开销小。

5,从通信方面:进程通信需要依靠操作系统,而线程可以直接读写进程数据段(全局变量)来进行通信。

进程通信可以采用的方法有:管道、信号、信号量、消息队列、共享内存、状态变量、套接字(socket)<不同机器之间>

线程通信貌似也有类似的一些东西

 

二、java中多线程的实现方式

 

1,线程创建

1.1继承Thread

1)定义Thread的子类,实现run()方法

2)创建Thread子类的对象  [创建之后,线程处于新建状态]

3)调用线程对象的start方法  [线程处于就绪状态]

1.2实现runnable或者callable

1)定义类,实现runnable接口,重写run方法

2)创建上述类类的对象  [创建之后,线程处于新建状态]

3)不直接调用上述对象的start方法,而是将其作为target。new Thread(对象).start()  [线程处于就绪状态]

 

2,控制线程的相关方法

1)join 让一个线程等待另一个线程完成。调用后,当前线程阻塞,直到被调用的线程执行结束。

2)sleep让线程休眠,由运行态进入阻塞态。

3)yield让线程重新调度,有运行态进入就绪态。

 

3,线程同步

1)同步代码块,利用Synhronized(obj){}修饰一段代码

2)同步方法,将方法使用Synhronized修饰

3)同步锁Lock,和同步方法比较类似,只是同步锁显示使用Lock对象作为同步锁

 

4,线程通信

1)全局变量

2)使用Object类的三个方法:该方法有同步监视器对象调用

wait:导致当前进程等待

notify:唤醒在该同步监视器上等待的进程(随机选一)

notifyAll:唤醒在该同步监视器上等待的所有进程