Thread

来源:互联网 发布:网页下载app源码 编辑:程序博客网 时间:2024/06/05 05:11

实现线程同步,总结三个结论:
1.当多个线程同事执行synchronized(x){}同步代码块时呈同步效果
2.当其他线程执行x对象中synchronized同步方法时呈同步效果
3.当其他线程执行x对象方法里面的synchronized(this)代码块时也呈通过效果
注意:如果其他线程在调用线程时不添加synchronized关键字的方法时,仍然处于异步调用;

**

单例模式与多线程

  1. 饿汉模式
public class MyObject {    private static MyObject myObject = new MyObject();    public static MyObject getInstance() {        return myObject;    }}
  1. 懒汉模式
public class MyObject {    private static MyObject myObject ;    synchronized public static MyObject getInstance() {        try {            if (myObject != null) {            } else {                myObject = new MyObject();            }        } catch (Exception e) {            // TODO: handle exception        }        return myObject;    }}

当然,同步代码块也是可以(同步方法是对方法的整体进行持锁,其运行效率相对较低)。

使用DCL双检查锁机制(这是最成功的方法,解决“懒汉模式”遇到多线程的问题,DCL也是大多数多线程结合单例模式使用的解决方案。)

public class MyObject {    private volatile static MyObject myObject ;    public static MyObject getInstance() {        try {            if (myObject != null) {            } else {                Thread.sleep(3000);                synchronized (MyObject.class) {                    if (myObject == null) {                        myObject = new MyObject();                    }                }            }        } catch (Exception e) {            // TODO: handle exception        }        return myObject;    }}**使用静态内置类实现单例模式**

public class MyObject {

// 静态内部类private static class MyObjectHandler {    private static MyObject myObject = new MyObject();}private MyObject(){}public static MyObject getInstance() {    return MyObjectHandler.myObject;}

}

**使用static代码块实现单例模式**

public class MyObject {

private static MyObject insMyObject = null;private MyObject(){}static {    insMyObject = new MyObject();}public static MyObject getInstance() {    return insMyObject;}

}

“`
线程状态
NEW
RUNNABLE
TERMINATED
BLOCKED
WAITING
TIMED_WAITING

原创粉丝点击