移动端并发编程基础篇

来源:互联网 发布:大学生防网络诈骗 编辑:程序博客网 时间:2024/06/03 19:51

1.ThreadLocal 解决多个线程访问一个对象

  ThreadLocal<Object> tl= new ThreadLocal<Object>();

  tl.set(object); //object绑定到本地线程 

  tl.get();   //获取该线程下的对象变量

  tl.remove(); //移除操作

  

ThreadLocal实现机制:

 Map<ThreadName,Object> mMap = HashMap<String,Object>() // HashMap自己内部实现的

 set(Object){

  String tName = Thread.getCurrentThread().getName();

       mMap.put(tName,object);

 }

 .....其他操作以此类推


2. volatile 目的多个线程访问中维持一个变量,不准许每个线程持有自己的变量。用来修饰变量


3.synchronized 同步锁,阻塞式。修饰方法,代码块

  1) 修饰在非静态方法前,叫做对象锁

      class A{

public synchronized void a(){

Thread.sleep(5*1000);

}

public synchronized void b(){

Thread.sleep(5*1000);

        }

      }


A a = new A();

       Thread tA = new Thead(){

run(){

a.a();

}

 

       Thread tB = new Thead(){

run(){

a.b();

}

  

       tA.start();

       tB.start();

     }

     上述是对象锁代码,tB会被阻塞住需要tA完全执行完毕,tB才能得到执行

  2) 修饰在静态方法前,叫做类锁

  class A{

public static synchronized void a(){

Thread.sleep(5*1000);

}

public static synchronized void b(){

Thread.sleep(5*1000);

        }

      } 

       Thread tA = new Thead(){

run(){

A.a();

}

  

       Thread tB = new Thead(){

run(){

A.b();

}

  

       tA.start();

       tB.start();

    上述是类锁代码实例,tB会被阻塞住需要tA完全执行完毕,tB才能得到执行

    对象锁和类锁之间相互之间不受影响


4.Atomic 原子操作类,通过算法实现非阻塞式解决高并发多线程访问同一变量的问题。使用场景,序列号生成。性能和效率优秀于阻塞式

  AtomicInteger  aInt = new AtomicInteger(defaultVal);

  int r = aInt.getAndIncrement();


  


原创粉丝点击