版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiejingguo/article/details/89220960
- 每创建一个线程都要消耗内存,每个线程都有自己的栈空间(大约1 M),也就是说每创建一个线程,操作系统就会给该线程分配1 M的空间。而且当线程执行完时间片后需要把数据保存至内存或硬盘中,下一个线程执行时又要从内存或硬盘中取出对应自己的数据,这么一存一取也很耗时间。这就是为什么线程开太多的话,会导致执行任务所花费的时间更多的原因。
- Thread和Runnable不是一对一的关系,而是一对多的关系。比如线程池里的线程就总是有限个,但是Runnable却可以有多个,丢给Thread执行。
- Thread的isInterrupted与static的interrupted的区别在于static方法调用后如果返回true,那么内部会将该boolean值又改回false。而isInterrupted不会。
- Join方法可以让两个线程顺序执行
- 当一个Thread调用sleep()或wait()方法后,若其它线程调用该线程的interrupt()的话,这两个方法就会抛出InterruptedException。但是抛出异常后,它们又会把这个中断标志位重新置为false。
- 线程A调用yield后,会从运行状态转为就绪状态。让操作系统去调用其它的线程,当然操作系统可能又会再调起线程A
- 如果想在Runnable的run方法中中断线程,可以如下:
class TestRunnable implements Runnable {
public void run() {
while(!Thread.currentThread().isInterrupted()) {
...
}
}
}
- 对象锁与类锁的区别
private synchronized void print() {//同步监视器是当前对象
...
}
private static synchronized void print() {//同步监视器是当前类的class对象
...
}
- Thread的yield和sleep不会释放锁。wait会释放锁
- Callable要学习下