#知识点总结第五篇
1.泛型类就是带有参数类型的类,其类中也有属性和方法 数据类型可以实已有的类型,也可以是"类型参数"的类型。
2.泛型的好处
1.强制类型检查,在编译的时候就能得到类型错误的消息
2.避免显是强制转换
3.方便实现通用算法
3.泛型的使用规则
1.泛型的类型参数只能是类类型,而不能是简单类型eg可以使用Interger但是不能用int
2.泛型的类型参数可以有多个,比如public class Pair{……}
3.静态字段的类型可以有很多个,如public class Box {private static T object}
4.不能直接创建类型参数变量的数组,只能通过反射创建
5.泛型的参数类型还可以使用extends和super关键词,eg:
6.泛型的参数类型还可以是通配符类型
4.泛型还能解决类型参数不固定的问题eg:
static void print(T...k) {
for(int i = 0;i 0) {
System.out.println(Thread.currentThread().getName() + " 抢到了票" + cnt--);
}
else
return;
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
23.volatile关键字多用于多线程的同步变量
eg:
private volatile int i;//表面声明了一个私有的线程同步的整数形的i
24.线程死锁
两个线程被堵塞,并且双方都在等待另一个线程
线程死锁的条件:
1.线程使用的资源必须至少是一个不能共享的
2.至少有一个线程必须持有一个资源并且正在等待获取一个当前被其他线程占有的资源
3.分配资源不能从相应的线程中被强制剥夺
4.第一个线程等待其他的线程,后一个线程等待第一个线程
25.每个对象只有一个锁,当同步的时候应该清楚在哪个对象上同步
26.如果线程拥有同步方法和非同步方法,则非同步方法可以被多个线程访问,且不受锁的限制
27.线程睡眠的时候,它所持有的任何锁都不会释放
28.使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行
29.线程是一个程序的单个执行流,而多线程是指一个程序的多个执行流,线程是程序的一部分,而不是程序本身
30.等待阻塞状态下的线程被notify()唤醒不能使线程从等待阻塞状态进入对象阻塞状态
31.wait()方法可以使线程从运行状态进入其他阻塞状态
32.新建的线程调用start()方法不一定立即进入运行状态,可能会被堵塞
