java多线程

关于线程的几个问题:

1.线程具有哪些状态?

线程有5个状态,分别是创建状态,就绪状态,运行状态,等待状态,死亡状态创建状态即是实例化Thread对象,创建线程有2中方式,1种是继承Thread类,一种是实例化runnable方法;就绪状态即是线程具备了运行的条件,有资格运行了;运行状态既执行run方法;等待状态可能是因为执行了sleep方法或阻塞等原因;死亡状态run方法运行完了。

2.什么是线程同步?

当两个线程同时共享一个数据时,当线程同时访问数据并修改它的时候就可能造成混乱。线程同步即同时只能有一个线程访问共享数据。这是我们就用到了synchronized关键字。它有两个含义,

一次只有一个线程可以执行受保护部分;

一个线程更改的数据对其他线程是可见的

 

同步的方法
public class SyncExample {
public synchronized void setXY(int x,int y){
this.x=x;
this.y=y
}}

同步的块
public
voidsetXY(intx,inty){
 
 syncExample (this){//this
表示该代码块与synchronized方法共锁
this.x=x;
this.y=y
}}}

 

3.线程调度优先级

1.Java定义了线程的优先级策略,优先级分为10个等级,数字越大优先级越高,

2.Java线程调度器按照优先级决定哪个线程(就绪状态)投入运行(同级别:时间片轮转调度算法)

3.默认优先级5setPriority(); getPriority();

4.特殊线程:守护线程(Daemon),具有最低的优先级(JVM中系统资源回收线程)

 

4.线程的运行和挂起

  yield()方法,导致当前线程从运行状态转变为准备运行状态,让出CPU时间,防止假死机 

  sleep()方法,不释放对象锁

 

5.等待和通知模型

线程Asynchronized(obj){

while(!condition){

obj.waiting();

}

obj.doSomething();

}

线程Bsynchronized(obj){

condition=true;

obj.notify();

}

首先A线程进入受保护的块中,但不满足条件,则进入等待状态。线程B运行改变了条件并通知A继续运行,则A继续运行。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值