• Java多线程实现和JUC介绍


    多线程的实现方式(继承父类和实现接口)三种

    1. 继承父类Thread,重写run()方法
      【实现】
    class MyThreadEx extends Thread{
    
            private String title;
            MyThreadEx(String title){
                this.title = title;
            }
    
            @Override
            public void run() {
                for (int i = 0;i < 10;i++){
                    System.out.println(currentThread().getName()+"--"+title+":"+i);
                }
            }
        }
    

    【调用】

    MyThreadEx thread = new MyThreadEx("A");
    thread.start();
    
    1. 实现接口(Runnable)实现接口方法run()
      【实现】
    class MyThread implements Runnable{
    
            private int i = 0;
    
            @Override
            public void run() {
               for (;i < 10;i++)
    
                System.out.println(Thread.currentThread().getName()+":"+i);
            }
        }
    

    【调用】

         MyThread runthread = new MyThread();
            new Thread(runthread,"A").start();
    
    1. 实现接口(Callable)实现接口方法call()(JUC 1.5之后,带返回值)
      Callable原理:

    【实现】

    class MyCallThread implements Callable{
    
            private int i = 0;
    
            @Override
            public Object call() throws Exception {
    
                for (; i < 10; i++){
                    System.out.println(Thread.currentThread() + "-callable:"+ i);
                }
                return "callable";
            }
        }
    

    【调用】

     FutureTask<String> task = new FutureTask<>(new MyCallThread());
    
            new Thread(task).start();
    
            System.out.println(task.get());
    

    java1.5后 java.util.concurrent(concurrent:并发)

    atomic:原子 ,AtomicInteger:原子引用

    1.volatile java虚拟机提供的轻量级的同步机制
    特性:
    (1)保证可见性
    (2)不保证原子性
    (3)禁止指令重排

    • 单利模式在多线程中失效(单例模式实现的两种方式:懒汉和饿汉),用DCL (Double Check Lock)
    public class Singleton{
      private static volatitle Singleton instance = null; //volatitle轻量级线程同步机制
        private Singleton(){
        }
        public static Singleton getInstance(){ //方法加synchronized,效率低
            if(instance == null){
                synchronized(Singleton.class){
                    if(instance == null){
                        instance = new Singleton();
                    }
                }
            }
        }
    }
    

    2.JMM:(java memory model)java内存模型,抽象概念,并不真实存在

    JMM 同步规定:
    (1)线程解锁之前,必须把共享的值刷新回主内存
    (2)线程加锁前,必须读取主内存最新的值到自己的工作内存
    (3)加锁解锁是同一把锁

  • 相关阅读:
    JS函数重载解决方案
    JavaScript开发规范
    ASP.Net中表单POST到其他页面的方法
    高效的使用 Response.Redirect
    jQuery性能优化
    百度WebUploader中实现文件上传下载的三种解决方案(推荐)
    WebUploader中实现文件上传下载的三种解决方案(推荐)
    vue中实现文件上传下载的三种解决方案(推荐)
    JavaScript中实现文件上传下载的三种解决方案(推荐)
    ST
  • 原文地址:https://www.cnblogs.com/monkay/p/11376623.html
Copyright © 2020-2023  润新知