什么是线程和进程? 进程一个在内存中运行的应用程序。 每个正在系统上运行的程序都是一个进程。线程进程中的一个执行任务(控制单元), 它负责在程序里独立执行。 一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。
因为Java所有类的都继承了Object,Java想让任何对象都可以作为锁,并且 wait(),notify()等方法用于等待对象的锁或者唤醒线程,在 Java 的线程中并没有可供任何对象使用的锁,所以任意对象调用方法一定定义在Object类中。
处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退出。wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。
类的不同:sleep() 是 Thread线程类的静态方法,wait() 是 Object类的方法。 是否释放锁:sleep() 不释放锁;wait() 释放锁。 用途不同:Wait 通常被用于线程间交互/通信,sleep 通常被用于暂停执行。
分配 CPU 时间可以基于线程优先级或者线程等待的时间。线程调度并不受到 Java 虚拟机控制,所以由应用程序来控制它是更好的选择(也就是说不要让你的程序依赖于线程的优先级)。