- 继承父类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();
- 实现接口(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();
- 实现接口(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());
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)加锁解锁是同一把锁
来源:博客园
作者:luck-monkey
链接:https://www.cnblogs.com/monkay/p/11376623.html