java多线程操作方法:
ta.interrupt();
ta.stop() 杀死线程对象ta
4 线程共享变量
4.1 控制线程共享变量可见关键字volatile
Java提供了volatile关键字来保证可见性。
当一个共享变量被volatile修饰时,它会保证修改的值会立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新值。
面试题:
ConcurrentHashMap和Hashtable区别?
答:ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对
与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用“锁分段”
机制替代 Hashtable 的独占锁。进而提高性能。
4.3 消费者和生产者模式
线程间通信机制
A:锁死现象?
面试:死锁条件是什么?
答:理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。
死锁代码?
public class DeadLock implements Runnable{
static Object objA=new Object();
static Object objB=new Object();
@Override
public void run() {
String tname = Thread.currentThread().getName();
if(tname.equals("t1")){
synchronized (objA){
System.out.println("t1锁定A....");
synchronized (objB){
System.out.println("t1锁定B....");
}
}
System.out.println("t1结束...");
}else{
synchronized (objB){
System.out.println("t2锁定B....");
synchronized (objA){
System.out.println("t2锁定A....");
}
}
System.out.println("t2结束...");
}
}
public static void main(String[] args) {
DeadLock dk=new DeadLock();
Thread t1=new Thread(dk,"t1");
Thread t2=new Thread(dk,"t2");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t1.start();
t2.start();
}
}
锁:
受到synchronized保护的程序代码块和方法中,要访问的对象属性必须设定为private,因为如果不设定为private,那么就可以用不同的方式来访问它,这样就达不到保护的效果了
死锁:两个线程,彼此在等待对方占据的锁
锁的归还几种方式:基本上执行完同步的程序代码后,锁就会自动归还;
1用break语句跳出同步的语句块,不过这对于写在方法声明的synchronized没有作用;
2遇到return语句;
3遇到了异常;