sleep()和wait()的区别:--sleep锁还在/wait锁释放
sleep的方法主要是让线程暂时休息一段时间,时间一到自动恢复,因此,调用sleep方法不会释放锁.
wait方法被调用,会释放锁.
简单来说wait()会释放对象锁而sleep()不会释放对象锁。
1.sleep();--让调用这个方法的正在执行的线程休眠一段时间--不释放锁
Thread.sleep(3000)//毫秒
2.wait();--要被notify/notifyAll唤醒 --synchronized 常一起使用
lock.wait();
try { synchronized (lock) { System.out.println("begin wait() ThreadName=" + Thread.currentThread().getName()); lock.wait(); System.out.println(" end wait() ThreadName=" + Thread.currentThread().getName()); } } catch (InterruptedException e) { e.printStackTrace(); }
3.join()的作用,以及如何使用.----join()的本质--阻断.
t1.join();
public class TestJoin {
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
ThreadTest t1=new ThreadTest("A");
ThreadTest t2=new ThreadTest("B");
t1.start();
t2.start();
t1.join();
--或者t2.join()作用一样
t3.start();
}
}
class ThreadTest extends Thread {
private String name;
public ThreadTest(String name){
this.name=name;
}
public void run(){
for(int i=1;i<=5;i++){
System.out.println(name+"-"+i);
}
}
}
有阻断作用,后面线程3不执行.等线程1,2执行完以后,再执行线程3.
t1和t2依然随机执行,不影响t1,t2执行顺序.
什么时候使用----
需要对线程进行阻断时..
4.Thread.yield();----将时间片礼让给别的线程.
使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了.
5.线程优先级:通过setPriority(int priority)设置线程优先级提高线程获取时间的几率(这只是提高线程优先获取时间片的几率 而不是肯定优先执行) getPriority()获取线程的优先级 最高为10 最低为1 默认为5
public static void main(String[] args) {
A a = new A("线程一:");
B b = new B("线程二:");
a.setPriority(3);
b.setPriority(10);
a.start();
b.start();
}