1. runnable接口和继承thread两种方法都可以实现用多线程运行任务, 但前者更像是定义一个任务, 而这个任务可以提交给线程去执行, 后者更像单独定制一个线程.
2. 只有调用thread的start的方法才会生成一个新的线程, 我之前以为只要调用run方法就行,实际上run方法调用是在当前线程中执行的.
3. 线程的终端. 不用调用Thread的stop方法,而是向线程发送interrup消息. 同时在任务线程中需要提供interrupt中断的处理代码.
线程属性
1. 线程的优先级
新线程继承父线程的优先级, 通过setPriority可以设置线程的优先级. 但是jvm的优先级机制依赖于宿主机, 不能保证优先级一定能够反应到线程的调度中去, 如linux就上就无视优先级.
2.守护线程
setDaemon方法设置, 功能????
3. 线程组
从功能上将线程区分开了进行管理, 这样就可以同时对一组线程进行操作. 线程组可以包含子线程组, 那么父线程的操作会递归在子线程组中调用?????
TreadGroup g = new ThreadGroup(groupname);
Thread t = new Thread(g, threadName);
g.interrupt()向该线程组中的线程发送中断消息.
4. 未捕获异常处理器
调用顺序: 线程的未捕获异常处理器(如果有) ---没有---> 线程组的未捕获异常处理器---没有---> 父线程组的未捕获异常处理器
Thread或者ThreadGroup的setUncaghtExcetionhandler
用途是在线程在一个线程因为一个未捕获异常而中断的时候,在线程死亡之前进行一个异常处理, 比如写日志等等.