当前位置: 首页 > news >正文

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原理:
    797576-20190820110441569-856303391.png

【实现】

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)加锁解锁是同一把锁

转载于:https://www.cnblogs.com/monkay/p/11376623.html

相关文章:

  • git commit撤回操作
  • 内存运行PE文件
  • Mysql数据库
  • Apache Kafka(六)- High Throughput Producer
  • 设计模式-策略模式
  • CTF 资源
  • hibernate的id生成策略
  • Apache Kafka(七)- Kafka ElasticSearch Comsumer
  • Apache Kafka(八)- Kafka Delivery Semantics for Consumers
  • liquibase 注意事项
  • Red Team远程控制软件
  • upload-labs 上传漏洞靶场环境以及writeup
  • Hive on Tez 中 Map 任务的数量计算
  • countUp.js-数字滚动效果(简单基础使用)
  • Windows 搭建 nginx rtmp服务器
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Consul Config 使用Git做版本控制的实现
  • Date型的使用
  • github指令
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Rancher如何对接Ceph-RBD块存储
  • React的组件模式
  • SQLServer之索引简介
  • vue-cli3搭建项目
  • Yii源码解读-服务定位器(Service Locator)
  • 编写高质量JavaScript代码之并发
  • 多线程 start 和 run 方法到底有什么区别?
  • 好的网址,关于.net 4.0 ,vs 2010
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 前端技术周刊 2019-02-11 Serverless
  • 前端自动化解决方案
  • 世界上最简单的无等待算法(getAndIncrement)
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 一份游戏开发学习路线
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​iOS实时查看App运行日志
  • ​queue --- 一个同步的队列类​
  • ​批处理文件中的errorlevel用法
  • ​人工智能书单(数学基础篇)
  • #1014 : Trie树
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)u-boot-nand.bin的下载
  • .Net MVC4 上传大文件,并保存表单
  • .Net Web窗口页属性
  • .net反编译的九款神器
  • .net项目IIS、VS 附加进程调试
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国