java学习5---Java 的多线程,程序、进程和线程的概念

来源:互联网 发布:centos 安装chrome 编辑:程序博客网 时间:2024/05/01 17:14

1、程序,进程,线程的概念

程序是计算机指令集,它以文件的形式存储在计算机磁盘上。

进程是程序在自身地址空间运行的活动,是资源申请,调度和独立运行的单位。一个程序可以由多个进程。

线程:是进程中单一的连续的控制流程,一个进程由多个线程组成。线程是轻量级的进程,它和进程一样拥有独立的控制流程,区别在它,没有独立的存储空间而是和它所属的进程的其他线程共享一个存储空间,这使得线程间的通讯较进程简单。

2、java对多线程的支持

在java中实现多线程有两种方式:

a、继承Thread类

b、实现Runnable接口

线程都拥有时间片,在运行一段时间后进行彼此的切换。

后台线程:利用线程的方法setDaemon(),且必须在线程启动前调用此方法。

yield() 方法可以使得线程放弃执行权利,暂停一下,允许其他线程执行。

线程的优先级

3、java对于多线程的支持

java程序在运行过程实现一个用于线程调度的线程调度器,用来确定某一时刻由那个线程在cpu上运行。

java中线程的调度不是采用时间片轮换模式,而是采用抢占式调度模型,高优先级的线程可以抢占低优先级的

java运行时所在的操作系统支持时间片轮换,那么线程调度器支持相同优先级的时间片轮换。

4、继承Thread类与实现Runnable接口选择

使用实现Runnable接口的2个好处:1、java不允许多继承,这时就得实现接口,2、用接口实现多线程,对于多线程要访问同一资源是很方便(可以调用Thread(Runnable 对象)的构造函数,可以构建同一对象的多个线程)

5、线程的同步

多线程共同访问某一个代码段,我们称为临界区。

同步有2种实现方式:同步块和同步方法。

同步的机制是锁,java中每个对象都有一个监视器,或者称为锁。线程进入程序块变进行加锁操作。

同步块需要对象即在同步的块前加Synchronized (object) 

同步方法即把同步块放到方法中封装,方法要申明为synchronized。

同步方法的机制是当线程进入方法时它会查看this没有加锁,如果没有则加锁操作。

每个class也哟一个锁,是这个class对象所对应的Class对象的锁。

6、wait,notify ,notifyall

每个对象除了有一个锁之外,还有一个等待队列,当一个对象被创建时,它的等待队列是空的。

我们应该在当前线程锁住对象的锁之后,去调用对象的wait方法,即wait方法只能在同步块和同步方法中使用。

当调用对象的notify方法时,将从对象的等待队列中删除一个任意选择的线程,这个线程将再次成为可以运行的线程。

当调用对象的notifyall方法时,将从对象的等待队列中删除所有的线程,这些线程将再次成为可以运行的线程。

wait和notify主要用于生产者--消费者的关系中。

7、线程的终止

a、设置一个flag变量

b、调用