有关线程的笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 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要学习下

猜你喜欢

转载自blog.csdn.net/jiejingguo/article/details/89220960
今日推荐