栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程基本使用入门(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程基本使用入门(一)

volatile关键字
最轻量的同步机制: 可以保证可见,但是不能保证原子。

//演示Volatile的提供的可见性
public class VolatileCase {
    private static boolean ready;
    private static int number;

    private static class PrintThread extends Thread{
        @Override
        public void run() {
            System.out.println("PrintThread is running......");
            while (!ready);
            System.out.println("number = "+number);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        new PrintThread().start();
        Thread.sleep(1000);
        number=51;
        ready=true;
        Thread.sleep(5000);
        System.out.println("main is ended");
    }
}

结果:

说明主程序中ready做的修改没有被线程看到。

现在把ready改为如下:

private volatile static boolean ready;

结果:

说明加了volatile之后,主线程的修改能被看见,但是它只能保证可见性,不能保证原子性,即不能保证某个数据在多个线程下同时写的时候的安全。

应用场景:一写多读。

ThreadLocal辨析
ThreadLocal : 每个线程都有变量的副本,实现线程的隔离。
Spring在实现事物的时候要借助ThreadLocal。
下面来看看如下例子:

public class UseThreadLocal {
    private static ThreadLocal threadLocal=new ThreadLocal(){
        @Override
        protected Integer initialValue() {
            return 1;
        }
    };

    
    public void StartThreadArray(){
        Thread[] runs=new Thread[3];
        for(int i=0;i 

结果如下:

说明能让每个线程有独立的副本。

如果定义多个ThreadLocal会放到map里面。
每个线程有个自己的ThreadLocalMap。

Entry(ThreadLocal k, Object v){
		super(k);
		value=v;
}

引用:强引用、软引用、弱引用、虚引用
Object o=new Object(); //强引用
SoftRefence 要发生溢出 软引用
所有的弱引用都在ThreadLocal 所标志出来:extends WeakReference> 。意味着只要发生垃圾回收,这个thread变量就一定会被回收。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463213.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号