(1)来源不同
<1>sleep()来自于Thread类中,表示线程睡眠 sleep(long time):时间毫秒值
<2>wait()来自于Object类中,表示线程等待,需要被锁对象来访问
(2)是否会释放锁
<1>sleep(long time):属于一个普通方法,调用该方法,不会去释放锁,只是导致线处于睡眠,当线程的睡眠时间到了,就继续执行线程
<2> wait():属于锁方法,被锁对象访问之后,会立即释放锁,才能够使用同步等待唤醒机制解决死锁问
题,通过锁对象调用notify(),唤醒对方线程
(3)这两个方法都会抛出异常(中断异常),都是属于本地方法,底层非Java语言实现
<1>当线程睡眠过程中,睡眠还没到,导致的睡眠状态被打断,就会出现InterruptedException
<2>当线程处于等待状态,被中断,就抛出这个异常
2.设计模式 2.1结构型设计模式:代理模式代理就是代理角色帮助真实角色完成一些事情.
(1)动态代理:反射中讲
(2)静态代理:通过代理角色帮助真实角色完成一些事情,真实角色只只专注于自己的事情;前提条件:
代理角色和真实角色必须是同一个接口.
3.线程组 3.1常用方法<1>ThreadGroup(String name): 构造一个新的线程组;
<2>public final ThreadGroup getThreadGroup():获取当前线程所属的线程组
<3>public final String getName():获取线程组名称
4.线程池使用线程池实现第三种线程的创建方式.
4.1常用的线程池接口和类<1>Executor: 线程池的顶级接口
<2>ExecutorService: 线程池接口,继承自Executor,可通过submit提交任务代码
<3>Executors: 工厂类,通过此类可以获得一个线程池
<4>通过Executors静态方法newFixedThreadPool(int nThreads)可获得固定数量线程池
<5>通过Executors静态方法newCachedThreadPool()获得动态数量线程池,不够会创建新的,没上限
4.2常用方法<1>Future> submit (Runnable task): 提交Runnable异步任务
<2>
<3>void shutdown(): 关闭线程池
<4>Callable接口是JDK5加入,与Runnable接口类似,实现之后代表一个线程任务,Callable具有泛型
返回值,可以声明异常.



