文章整理 : (陆续添加)
- ThreadPoolExecutor线程池参数设置技巧
- 线程池(ThreadPoolExecutor JDK1.7)
- 什么是阻塞队列(BlockingQueue)JDK1.8
- tomcat最大线程数的设置
- Runnable接口的run()方法和start()方法
- Runnable只有一个抽象的run()方法 ;Runnable实现类实例(包括Thread的子类都对应于操作系统中的一个线程
- Java创建线程数目问题
- synchronized与Lock的区别与使用
- 生产者/消费者模式的理解及实现
================
学习笔记:
- 看到网上有几篇文章 , 喷面试官二货 , 指明Runnable和Thread是没区别的云云 , 刚开始也是云里雾里 ; 现在感觉 :两者有本质区别 , 譬如线程池的实现上 , 为什么线程类用的是继承Thread , 复写run()方法 , 而在实现类上 , new Runnable()后复写run()方法呢 ? 说白了Runnable只有一个抽象的run()方法 ;
// 为此 , 我new了两个对象进行比较 ;仅从内存占用来看 ;
// Runnable() = 2字节 ;
// Thread >= 33K ;
一个是线程类 , 一个是接口 ; 信息量和功能肯定不同了 ;
===========
=============
个人补充一点 : tryLock在unlock时,需要判断锁状态 , 否则会抛异常 :
Thread t1 = new Thread("线程A") {
@Override
public void run() {
boolean locked = false;
try { // 要try.catch后,释放锁;
locked = lock.tryLock(4, TimeUnit.SECONDS); // 4秒内获取不到,就执行后面的代码 ;
if (locked) {
Thread.sleep(5000);
} else {
System.out.println(this.getName() + "放弃");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (locked) {
lock.unlock();
System.out.println(this.getName() + "释放锁");
}
}
System.out.println(this.getName() + "线程结束");
}
};