java线程、锁、sleep、wait

线程创建
线程创建有两种方法,extends Thread或者implements Runnable,区别是一个是继承一个是接口。都必须重写run()方法


优级级

public final void setPriority(int newPriority) 设置线程的优先级为 newPriority :          
newPriority 的值必须在 MIN_PRIORITY 到MAX_PRIORITY范围内,通常它们的值分别是1和10。

Windows系统只支持3个级别的优先级, 它们分别是Thread.MAX_PRIORITY、 Thread.MIN_PRIORITY和Thread.NORM_PRIORITY。  

public final int getPriority() 获得当前线程的优先级。


同步锁

当把一语句块声明为 synchornized,在同一时间,它的访问线程之一才能执行该语句块。


1) 方法同步:用关键字 synchonized 可将方法声明为同步,格式如下

class 类名{   
     public synchonized 类型名称 方法名称(){   
           ......   
     }   
}   

2)语句块同步: 对于同步块,synchornized 获取的是参数中的对象锁

synchornized(obj)   
{    
  //………………….    
}   


当线程执行到同步块时, 它必须获取 obj 这个对象的锁才能执行同步块;否则线程只能等待获得锁。必须注意的是obj对象的作用范围不同,控制情况不尽相同。
当两个并发线程访问同一个对象的 synchornized(o)同步代码块时,一段时间内只能有一个线程运行。另外的线程必须等到当前线程执行完同步代码块释放锁之后,获得锁的线程将执行同步代码块。

有时可以通过下面的格式声明同步块。

public void method()   
{    
synchornized(this)  //同步块   
{    
    //………………………   
    }    
}   

当有一个线程访问某个对象的 synchornized(this)同步代码块时,另外一个线程必须等待该线程执行完此代码块,其他线程可以访问该对象中的非 synchornized(this)同步代码。如果类中包含多个 synchornized(this)同步代码块,如果同步线程有一个访问其中一个代码块,则其他线程不能访问该对象的所有 synchornized(this)同步代码块。对于下面形式的同步块而言,调用 ClassName 对象实例的并行线程中只有一个线程能够访问该对象。

synchornized(ClassName.class)   
{    
    //…………………….   
}   



sleep与wait

1)这两个方法根本来自不同的类,sleep来自Thread,wait来自Object类。

sleep是Thread提供的一个静态方法,该方法出现在那个线程中,那个线程就"睡觉"(非执行状态),并非是 调用该方法的线程睡觉,例如a线程中调用线程b.sleep(),a线程睡觉。

wait是Object类的方法,用来线程间的通信,这个方法会使当前拥有该对象锁的进程等待直到其他线程调用notify方法时再醒来,不过你也可以给他指定一个时间,自动醒来。这个方法主要是用走不同线程之间的调度的。

2)sleep方法没有释放“锁”,而wait方法释放了"锁",不然的话就会形成死锁了。

sleep是不让出系统资源的;wait是线程交互时,如果线程a对一个同步对象x发出一个wait调用该线程会进入线程等待池等待,需要等其他线程调用notify/notifyAll唤醒,或者指定的时间过后自动唤醒。

无论是sleep设置的时间到了,还是wait之后被唤醒了,线程并不一定立即恢复执行,而是触发"操作系统重新进行一次CPU竞争"。

3)两个方法都需要抛出异常。wait()必须放在synchronized block中,否则会在program runtime时扔出”java.lang.IllegalMonitorStateException“异常

4) 使用范围不一样。sleep用于线程控制,而wait用于线程间的通信

synchronized(x){ 
   x.notify() 
   //或者wait() 
}


Java线程

http://blog.csdn.net/hguisu/article/details/7490616

Java Thread(线程)案例详解sleep和wait的区别

http://www.cnblogs.com/DreamSea/archive/2012/01/16/SleepAndWaitDifferent.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值