1.线程和进程区别:
a.操作系统调度的最小单元是线程
b.在一个进程里可以创建多个线程
c.进程是系统资源分配的单位,线程是CPU调度的单位。
d.进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。同时线程还有自己的栈和栈指针,程序计数器等寄存器。
e.进程有自己独立的地址空间,而线程没有,线程必须依赖于进程而存在。
f.进程切换的开销较大。线程相对较小。
2.多线程的原因
(1)更多的处理器核心
(2)更快的响应时间
(3)更好的编程模型
4.Daemon类线程随着main方法执行完毕而终止,Java虚拟机中要是没有非Daemon线程,虚拟机需要退出。连带着所有Daemon类线程都需要立即终止,就算是Daemon类中的finally块也并不一定会执行。(在构建Daemon线程时,不能依靠finally块中的内容来确保执行关闭或清理资源的逻辑。)
5.start():只要线程规划器空闲,应立即启动调用start()方法的线程
6.中断可以理解为线程的一个标识位属性
isInterrupted()来进行判断是否被中断
其他线程调用线程的interrupt()方法对其进行中断操作
7.等待/通知机制
1)使用wait()、notify()和notifyAll()时需要先对调用对象加锁。
2)调用wait()方法后,线程状态由RUNNING变为WAITING,并将当前线程放置到对象的等待队列
3)notify()或notifyAll()方法调用后,等待线程依旧不会从wait()返回,需要调用notify()或 notifAll()的线程释放锁之后,等待线程才有机会从wait()返回
4)notify()方法将等待队列中的一个等待线程从等待队列中移到同步队列中,而notifyAll()方法则是将等待队列中所有的线程全部移到同步列,被移动的线程状态由由等待状态变为阻塞状态
5)从wait()方法返回的前提是获得了调用对象的锁。