线程的状态与调度
Java线程总结:start方法表示同时有run与main一同运行。线程暂停的情况有主动延迟函数,等待i/o和同步。同步目前不是很清楚
继承Thread类和实现Runnable接口区别
实现Runnable接口的类可以多线程操控同一个类。
线程优先级
- thread有十个优先级用整数1-10表示
- thread自带三个设置的优先级
static int MAX_PRIORITY
线程可以具有的最高优先级,取值为10。
static int MIN_PRIORITY
线程可以具有的最低优先级,取值为1。
static int NORM_PRIORITY
分配给线程的默认优先级,取值为5。
-
如果要设置和获取线程的优先级,可以使用Thread类的
setPriority()
和getPriority()
方法。 -
每个线程都有默认的优先级。主线程的默认优先级为
Thread.NORM_PRIORITY
。 -
线程的优先级有继承关系,比如A线程中创建了B线程,那么B将和A具有相同的优先级。
-
即使可以设置10个优先级,但是考虑到移植应当使用自带的三种优先级。(因为映射)
-
线程优先级还有:
- 线程睡眠
- 线程等待
- 线程让步:线程让步:
Thread.yield()
方法,暂停当前正在执行的线程对象,把执行机会让给相同或者更高优先级的线程; - 线程加入:
join()
方法,等待其他线程终止。在当前线程中调用另一个线程的join()方法,则当前线程转入阻塞状态,直到另一个进程运行结束,当前线程再由阻塞转为就绪状态; - 线程唤醒:Object类中的n
otify()
方法,唤醒在此对象监视器上等待的单个线程。如果所有线程都在此对象上等待,则会选择唤醒其中一个线程。选择是任意性的,并在对实现做出决定时发生。线程通过调用其中一个 wait 方法,在对象的监视器上等待。 直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争;例如,唤醒的线程在作为锁定此对象的下一个线程方面没有可靠的特权或劣势。类似的方法还有一个notifyAll()
,唤醒在此对象监视器上等待的所有线程。
常用函数
sleep(long millis)
- 在线程的内部使用
Thread.sleep(millis)
join();
- 在主函数使用
- 需要捕获异常
-
run()
方法可以递归,可以有返回值。
yield()
- 使当前程序退出cpu,让cpu重选
wait()
- 线程锁(又碰见傻逼用术语解释术语,妈的智障)
网友评论