线程安全问题

1.如何保证线程的安全

①.使用同步代码块

public class Test {
    static  String str[]=new String[5];
    static int index=0;
    public static void main(String[] args) throws Exception {
          //1.创建两个任务对象
         Runnable tast1=new Runnable() {//匿名内部类
             public void run() {
                 //同步代码块  
                 synchronized (str) {
                     if (str[index] == null) {
                         str[index] = "hello";
                         index++;
                     }
                 }
             }
         };
         Runnable tast2=new Runnable() {
             public void run() {
                 synchronized (str) {//必须是一个对象   而且共有一个资源
                     if (str[index] == null) {
                         str[index] = "world";
                         index++;
                     }
                 }
             }
         };

         Thread t1=new Thread(tast1,"A");
         Thread t2=new Thread(tast2,"B");
         t1.start();
         t2.start();

         t1.join();
         t2.join();
        System.out.println(Arrays.asList(str));
    }
}

②.使用同步方法  

在方法中加上  synchronized 

public class T {

    public static void main(String[] args) {
    
        Runnable tast1=new Runnable() {//匿名内部类
            public  synchronized void run() {
                
            }
        };
    }
}

2.线程安全类有哪些?

(1) Hashtable

(2) StringBuffer

(3)Vector

Hashtable和hashmap得区别?

  1. 线程安全

  2. key和value是否允许null

  3. 效率上

3.死锁

所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。

因此我们举个例子来描述,如果此时有一个线程A,拥有锁A   线程B 拥有锁B  当线程A 需要锁B 才会释放锁A 而线程B 需要锁A 才会释放锁B 两者僵持不下  就产生了死锁

上一篇:ubuntu系统无法打开系统设置、无法右键打开文件属性、无法播放视频


下一篇:Webkitx VHX ActiveX VLC 媒体播放器