1、两线程程序对初始为零的非负整数,一增一减, 同时每次对变量输出。
生产者消费者问题(用object类中wait和notify方法)
2、关于wait,notify,notifyAll,以及sleep方法的关系(重要)
1)如果一个线程调用了某个对象的wait方法,那么该线程首先必须要拥有该对象的锁,(换句话说,一个线程如果调用了某个对象的wait方法,那么该wait方法必须在synchronize中)
2)在一个线程调用某个对象了wait方法,那么该线程就会释放该对象的锁
3)在java对象,中,有两种池(锁池、等待池)
4)如果一个线程调用了某个对象的wait方法,那么该线程进入该对象的等待池中(释放锁),如果未来的某一时刻,另外的一个线程调用了相同对象的notify或者notifyall方法,那么在等待池中等待的线程就会起来进入到该对像的锁池中,去等待获得该对象的锁,如果获得锁成功后,那么该线程将继续沿着wait方法之后的路径去执行。
3、notify(随机唤醒一个)、notifyAll(全部唤醒)、notify(20)(20秒后自己唤醒) sleep(和notify区别,如果一个线程调用了sleep方法时,不会失去对象的锁定拥有权。)
4、synchronize关键字的作用
在某个对象中所有synchronize方法,在某一个时刻,只能有唯一的线程去访问这些synchronize方法
即,若一个对象有多个synchronize,当在执行其中的某一synchronize方法时,整个对象是锁定的,此时其他的synchronize对象也是锁定的。
如果一个synchonize方法是静态的,那么该synchronize关键字表示给当前对象对应的Class上锁,(每个类不管生成多少个对象,对应的Class对象只有一个!)
5, Collections (集合的工具类:集合的反序、查找等)和 Collection(集合顶层接口,下面有list和set)
6, HashMap和Hashtable的区别?
1). HashMap的方法都是非同步的,对于单线程来说,效率要高
Hashtable方法是同步的,对于单线程来说,效率要低
2). HashMap的key和value都可以为空。
Hashtable的key和value都不可以为空。
7. short s = 1;
s = s + 1;——————>编译会通不过(大的类型转换成小的,需要强制类型转换)修改成s=(short)(s+1)
short s = 1;
s += 1; 准确