-
为什么有线程安全问题?
当多个线程同时共享,同一个全局变量或静态变量做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。
做读操作是不会发生数据冲突问题。 -
如何解决多线程之间的安全问题?
使用多线程之间同步(synchronized)或使用锁(lock—jdk1.5并发包)。 -
为什么使用线程同步或使用锁能解决线程安全问题呢?
将可能会发生数据冲突问题(线程不安全问题),只能让当前一个线程进行执行。代码执行完成后释放锁,然后才能让其他线程进行执行。这样的话就可以解决线程不安全问题。 -
什么是多线程之间同步?
当多个线程共享同一个资源,不会受到其他线程的干扰。 -
什么是同步代码块?
就是将可能会发生线程安全问题的代码包括起来。
synchronized(oj){
if(count>0){
System.out.println(Thread.currentThread().getName()+"窗口出售第"+(100-count+1)+"张票");
count--;
}
}
- 什么是同步函数?
在方法上修饰synchronized称为同步函数。
public synchronized void show(){
if(count>0){
try {
Thread.sleep(40);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
System.out.println(Thread.currentThread().getName()+"窗口出售第"+(100-count+1)+"张票");
count--;
}
}
}
-
同步函数是什么锁?
同步函数使用this锁。
证明方式:一个线程使用同步代码块(this明锁),另一个线程使用同步函数。如果两个线程抢票不能实现同步,那么会出现数据错误。 -
什么是静态同步函数?
方法上加上static关键字,使用synchronized 关键字修饰,或者使用类.class文件。
静态的同步函数使用的锁是该函数所属字节码文件对象。
可以用getclass方法获取,也可以用当前类名.class表示。 -
什么是多线程死锁?
同步中嵌套同步,导致锁无法释放 -
死锁类型:数据库死锁、线程死锁、行锁、表锁