线程特性以及常用术语

package my.thread.test1;

/**
 * @author 蔡长盟
 * @description 
 * @version 2017年7月26日
 */
public class T1 {

    /**
     * 线程的特性: 原子性.内存可见性,重排序
     *      原子性: 操作是单一不可分割的操作
     *      内存可见性: cpu在执行代码时,为了减少变量访问的时间消耗可能会将变量的值缓存到该cpu的缓存区.因此在再次访问该变量时
     *          可能会从cpu缓存而不是主内存中读取的. 同样的,对变量的修改等操作也会写入cpu缓存区,而没有写回主内存.cpu的缓存区
     *          对其他cpu而言是不可见的.这就导致了其他cpu上的线程可能无法看到该线程对某变量的更改,这就是内存可见性.
     *      重排序: 编译器和cpu为了提高指令的执行效率可能会进行指令重排序.使得代码的实际的执行方式可能不是按照我们认为的方式进行的.
     *          如一个对象的初始化.可能会先为该实例引用创建内存空间并且创建引用,而不是先去初始化某个实例对象
     * 多线程的优势:
     *      提高系统的吞吐率: 使得一个进程中可以有多个并发的操作. 例如当一个线程因为I/O操作而处于等待时,其他线程仍然可以执行其操作
     *      提高响应性: 
     *      充分利用多核cpu资源: 如今多核设备越来越普及,避免资源浪费
     *      最小化对系统资源的使用: 一个进程中的多个线程可以共享其所在进程锁申请的资源(如内存空间),因此使用多个线程相比于使用多个进程进行编程
     *          而言,节省了对系统资源的使用
     *      简化程序的结构: 线程可以简化复杂应用程序的结构
     * 多线程的风险:
     *      线程安全问题: 如丢失更新,读取帐数据,数据一致性问题等
     *      上下文切换: 上下文切换会增加系统的消耗,不利于系统的吞吐率
     *      可靠性: 如果某进程出现意外终止,那么该进程的所有线程均会死亡. 
     *          所以某些情况下要考虑多进程多线程的编程方式
     */     
    public static void main(String[] args) {
        // synchronized 与 volatile 的区别
        // synchronized能保证操作的原子性,而且也能保证内存可见性. 能保证上下文切换,而后者不能
        // volatile只能保证内存可见性和禁止指令重排序
    }
}

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值