Java多线程实现和JUC介绍

Posted monkay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)加锁解锁是同一把锁

以上是关于Java多线程实现和JUC介绍的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock

Java---JUC并发篇(多线程详细版)

Java---JUC并发篇(多线程详细版)

java多线程系类:JUC线程池:01之线程池架构

Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap

Java多线程系列--“JUC集合”06之 ConcurrentSkipListSet