多线程(4)控制线程

版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/xurk0922/article/details/73382375

控制线程

java的线程提供了一些方法,通过这些方法我们可以很方便的对线程进行控制。

join方法

当在某个线程中通过另一线程对象调用join方法时,调用者将会被阻塞,直到join方法加入的join线程完成为止。

MyThread thread = new MyThread();       // 创建一个线程对象
thread.start();     // 启动线程
thread.join();      // 调用对象的join方法,这是代码运行所在的线程对阻塞直到thread完成为止
  • join():等待这join的线程完成
  • join(long millis):等待join的线程millis毫秒。如果在millis毫秒内被join的线程未完成,被阻塞线程也会进入就绪状态
  • join(long millis, int nanos):同同上,nanos是微秒值

sleep方法

可以让调用的线程暂停时段时间,并且进入阻塞状态。

Thread.sleep(1000);
  • static void sleep(long millis):让当前执行的线程暂停millis毫秒,并进入阻塞状态
  • static void sleep(long millis, int nanos)

yield方法

让当前执行的线程暂停并且直接进入就绪状态

Thread.yield();

sleep和yield的区别
1. sleep方法暂停当前线程之后,会给其他线程执行机会,不会理会其他线程的优先级。但yield方法只会给优先级相同,或者优先级更高的线程执行机会。
2. sleep方法会将线程进入阻塞状态,直到阻塞完成之后进入就绪状态。而yield方法不会使线程进入阻塞状态,它只是强制当前线程进入就绪状态。因此完全有可能某个线程调用了yield方法之后,立即在获得cpu资源后执行。
3. sleep方法声明了interrupateException,所以调用sleep方法时要么捕捉异常,要么显示声明抛出该异常。而yield方法则没有声明抛出任何异常。
4. sleep方法比yield方法有更好的可移植性。

线程优先级

优先级越高获得cpu的机会越多;setPriority(int newPriority)和getPriority()来设置和返回制定线程的优先级。其中set方法的参数是一个整数,范围是1~10。在设置线程优先级的时候尽量避免用数字,而要使用Thread的静态常量:MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORITY;这是为了保持最好的可移植性。

猜你喜欢

转载自blog.csdn.net/xurk0922/article/details/73382375