java thread的父类_Java多线程实现和JUC介绍

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

继承父类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原理:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值