多线程练习---交替打印/多线程下安全实现懒汉式单例模式

5月27

使用双重检查DCL实现多线程下懒汉式单例模式:

package com.itheima.bookcurrentment;

import lombok.SneakyThrows;
import java.util.concurrent.TimeUnit;

public class MyObject {
    private volatile static MyObject myObject;
    private MyObject(){}

    public static MyObject getInstance() throws InterruptedException {
        if(myObject!=null){
        }else {
            TimeUnit.SECONDS.sleep(1);
            synchronized (MyObject.class){
                if(myObject==null){
                    myObject=new MyObject();
                }
            }
        }
        return myObject;
    }
}
class myThread extends Thread{

    @SneakyThrows
    @Override
    public void run() {
        System.out.println(MyObject.getInstance().hashCode());
    }
}

测试类:

package com.itheima.bookcurrentment;

import com.sun.deploy.net.proxy.ProxyUnavailableException;
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

public class DCLSingleton {
    public static void main(String[] args) {

    Thread t1=new myThread();
        Thread t2=new myThread();
        Thread t3=new myThread();
    t1.start();
    t2.start();
    t3.start();
    }
}

打印结果:
802393921
802393921
802393921

使用静态内部类实现多线程下懒汉式单例模式:

package com.itheima.bookcurrentment;

import lombok.SneakyThrows;
import java.util.concurrent.TimeUnit;

class MyObject {
   private static class MyObjectHandler{
       private static MyObject myObject=new MyObject();
   }
   private MyObject(){}

   public static MyObject getInstance(){
       return MyObjectHandler.myObject;
   }

}

class myThread extends Thread{
    @Override
    public void run() {
        System.out.println(MyObject.getInstance().hashCode());
    }
}
package com.itheima.bookcurrentment;

import com.itheima.bookcurrentment.myThread;

public class StaticSingleton {
    public static void main(String[] args) {
        Thread t1=new myThread();
        Thread t2=new myThread();
        Thread t3=new myThread();
        t1.start();
        t2.start();
        t3.start();
    }
}

打印结果:
878933552
878933552
878933552

用ReentrantLock类的await()和single()方法实现交替打印:
1)写一个打印的方法:

package com.itheima.bookcurrentment;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public class MyService {
    private ReentrantLock lock=new ReentrantLock();
    private Condition condition=lock.newCondition();
    private boolean hasValue=false;

    public  void set(){
        try{
            lock.lock();
            while (hasValue==true){
                condition.await();
            }
            System.out.println("打印00");
            hasValue=true;
            condition.signal();

        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
         lock.unlock();
        }
    }
    public void get(){
        try{
          lock.lock();
          while (hasValue==false){
              condition.await();
          }
            System.out.println("打印11");
          hasValue=false;
          condition.signal();
        }catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
     lock.unlock();
        }

    }
}

2)写两个线程调用该打印方法

package com.itheima.bookcurrentment;

public class MyThreadA extends Thread{
    private MyService myService;
    public MyThreadA(MyService myService){
        this.myService=myService;
    }

    @Override
    public void run() {
        for(int i=0;i<Integer.MAX_VALUE;i++){
            myService.set();
        }
    }
}
package com.itheima.bookcurrentment;

public class MyThreadB extends Thread{
    private MyService myService;
    public MyThreadB(MyService myService){
        this.myService=myService;
    }
    @Override
    public void run() {
        for(int i=0;i<Integer.MAX_VALUE;i++){
            myService.get();
        }
    }
}

3)写一个测试类,实例化两个线程,并启动,查看打印结果

package com.itheima.bookcurrentment;

public class MyTest {
    public static void main(String[] args) {
        MyService myService=new MyService();
        MyThreadA a=new MyThreadA(myService);
        a.start();

        MyThreadB b=new MyThreadB(myService);
        b.start();
    }
}

打印结果:
打印11
打印00
打印11
打印00
打印11
打印00
打印11
打印00
打印11
打印00
打印11
打印00
打印11

内容概要:本文档主要介绍了Intel Edge Peak (EP) 解决方案,涵盖从零到边缘高峰的软件配置和服务管理。EP解决方案旨在简化客户的入门门槛,提供一系列工具和服务,包括Edge Software Provisioner (ESP),用于构建和缓存操作系统镜像和软件栈;Device Management System (DMS),用于远程集群或本地集群管理;以及Autonomous Clustering for the Edge (ACE),用于自动化边缘集群的创建和管理。文档详细描述了从软件发布、设备制造、运输、安装到最终设备激活的全过程,并强调了在不同应用场景(如公共设施、工业厂房、海上油井和移动医院)下的具体部署步骤和技术细节。此外,文档还探讨了安全设备注册(FDO)、集群管理、密钥轮换和备份等关键操作。 适合人群:具备一定IT基础设施和边缘计算基础知识的技术人员,特别是负责边缘设备部署和管理的系统集成商和运维人员。 使用场景及目标:①帮助系统集成商和客户简化边缘设备的初始配置和后续管理;②确保设备在不同网络环境下的安全启动和注册;③支持大规模边缘设备的自动化集群管理和应用程序编排;④提供详细的密钥管理和集群维护指南,确保系统的长期稳定运行。 其他说明:本文档是详细描述了Edge Peak技术及其应用案例。文档不仅提供了技术实现的指导,还涵盖了策略配置、安全性和扩展性的考虑,帮助用户全面理解和实施Intel的边缘计算解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值