多进程和多线程的区别:每个进程拥有自己的一套变量,而线程共享数据。
不要调用Thread类或Runnable对象的run方法。直接调用run方法只会执行同一个线程中的任务,而不会启动新线程。
应该调用start方法,该方法才能创建新线程。
没有可以强制线程终止的方法,线程的终止是通过interrupt方法来请求,该线程自己决定如何响应中断。
如果线程已被中断,此时还调用sleep方法,中断置位会被清除并抛出异常。
线程中存在两个方法,一个是interrupted方法,该方法是静态方法,该方法检测当前线程是否中断的同时还会清除中断状态。另一个方法是isInterrupted方法,这是一个实例方法,这个方法不会改变中断状态。
刚new出来的线程处于new状态,调用start方法后线程处于runnable状态,运行中的线程正是处于可运行状态。当一个线程试图获得一个内部的对象锁,而该锁被其他线程持有,该线程进入阻塞状态。当其他线程释放锁时且线程调度器允许该线程持有它,此时线程变成非阻塞状态。当线程等待另一个线程通知调度器一个条件时,此时该线程就进入了等待状态。若等待时有一个超时参数,则线程进入计时等待状态。
每个线程都有一个优先级,一个线程会继承其父线程的优先级。
守护线程唯一用途是为其他线程提供服务。
线程的非受查异常需要被传递到一个用于未捕获异常的处理器。
不能对带资源的try语句使用锁。
应用Lock和Condition接口是最基本的加锁处理,
若使用volatile关键字声明一个域,则代表该域可能被另一个线程并发更新。
在多线程程序中,应该用offer,poll,peek这类操作失败时返回null而不是抛出异常的方法。
任何集合类都可以通过同步包装器变成线程安全的,实现原理是应用了锁。
FutureTask包装器可以将Callable转换成Future和Runnable。