(2011年java基础)线程



操作系统:


进程管理

进程是什么?

其实就是多道程序环境下,所允许的多个程序并发执行。而作为资源分配和独立运行的基本单位。


进程的三种基本状态?

就绪状态

当进程分配到除CPU意外的所有必要资源后,只要再获得CPU,便可立即执行。

执行状态

正在运行中。

阻塞状态

正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机暂停状态亦即进程的执行受到了阻塞。(也叫等待状态和封锁状态)


究竟进程状态在CPU和内存中是一种什么结构?
其实很简单,就绪有就绪的队列,阻塞有阻塞的队列,他们都在排队等待资源,或者说抢占资源。


那么进程是如何在就绪队列中排顺序?

利用调度算法:常见的有静态优先级算法,动态优先级算法,时间片轮转法。


那么什么是线程呢?

那么说下线程和进程的不同就知道:(参考计算机操作系统)

1,调度

进程是作为资源拥有的基本单位

线程是作为调度和分派的基本单位

2,并发性

一个进程中的多个线程之间可以并发执行和进程在操作系统中一样

3,拥有资源

一般而言,线程不拥有系统资源,但是可以访问其隶属进程的资源

4,系统开销

进程创建和撤销的时候,系统都要为之创建和回收进程控制块,分配或回收资源。

而线程切换时,仅需保存和设置少量寄存器内容,不涉及存储器管理方面的操作

所以进程的开销是远大于线程的开销。


二 进程通信

因为进程通信涉及较广,这里总结下同步和互诉机制就好了


------------------------------------------------------------------------------------------------------------------------------


1,什么是同步?

就是进程-进程的制约关系,某进程若收不到另一个进程给他提供的必要信息就不能继续运行下去。


2,什么是互诉?

就是进程-资源-进程的间接制约关系,两个进程不能同时使用同一资源。


3,如何解决?

引入信号量 P,V操作

这里省略.........因为这就类似对象的锁一样。



java线程


1,创建线程有两种方法,继承Thread和实现Runnable 复写run方法

因为Runnable 方法的创建线程可以实现一个对象多个线程调用,

那个时候就产生了一个疑问:为什么可以多个线程用一个对象呢,而且还可以共享同一变量和代码段?虽然堆内存是线程共享的,

后来才有点明白,是因为复写的那个run方法,因为线程调用的是run方法,所以对于对象里面的操作其实是对象里面的处理,线程的作用就是分别调用了run。


2,如果同步函数被静态修饰后,使用的锁是什么呢?

锁就类似信号量P,V操作

静态的同步方法,使用的锁是该方法所在类的字节码文件对象

如果不是,就是资源对象。


3,如何发现阻塞性问题?

1,明确哪些代码是多线程运行代码。
2,明确共享数据。
3,明确多线程运行代码中哪些语句是操作共享数据的。


4,如何解决?

当一个线程在执行多条操作共享数据代码时,其他线程即使获取了执行权,也不可以参与操作。


5,对于进程-进程的同步问题

这样的问题,就是,进程完成了一个操作就进行等待,等待对方进程的完成,但是要是>2的进程,就要重复判断进程符合进入锁的条件while()



总结,进程是那种,看上去还是比较简单,但是要做好却要大量的实践,所以找个时间还是多多实践下好了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值