1.如何创建并运行java线程 创建一个线程可以继承java的Thread类,或者实现Runnabe接口. public class thread { static class MyThread1 extends Thread{ @Override public void run() { System.out.println("run a myThread1"); } } static class MyThread2 implements Runnable{ @Override pub…
1.ThreadLocal Java中的ThreadLocal类可以让你创建的变量只被同一个线程进行读和写操作.因此,尽管有两个线程同时执行一段相同的代码,而且这段代码又有一个指向同一个ThreadLocal变量的引用,但是这两个线程依然不能看到彼此的ThreadLocal变量域.ThreadLocal类提供了get和set等访问接口,这些方法为每个线程都存有一个独立的副本,因此每次get总是返回当前线程上一次最小使用set设置的值. private ThreadLocal myThreadLo…
1.同步容器类 同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁保护复合操作. 容器上常见的复合操作包括但不限于:迭代(反复访问数据,直到遍历完容器中所有的元素为止).跳转(根据指定顺序找到当前元素的下一个元素)以及条件运算(例如:如果没有则添加). 这些复合操作在没有客户端加锁的情况下仍然是线程安全的,但是当其他现场并发的修改容器时,它们就可能出现意料之外的行为. public static Object getLast(Vector list){ int lastIndex…
1.实例封闭 class personset{ private final Set<Person> myset = new HashSet<Person>(); public void addPersom(Person p){ myset.add(p); } public boolean containPerson(Person p){ return myset.contains(p); } } 这个类的状态是由HashSet来进行管理的,这里的myset是私有的且并不会逸出,因此…
关于非阻塞算法CAS. 比较并交换CAS:CAS包含了3个操作数---需要读写的内存位置V,进行比较的值A和拟写入的新值B.当且仅当V的值等于A时,CAS才会通过原子的方式用新值B来更新V的值,否则不会执行任何操作.无论位置V的值是否等于A,都将返回V原有的值.然后线程可以基于新返回的V值来做对应的操作,可以反复尝试.通常,反复重试是一种合理的策略,但在一些竞争很激烈的情况下,更好的方式是在重试之前首先等待一段时间或者回退,从而避免造成活锁问题.CAS的主要缺点就是,它将使调用者处理竞争问题,而…
摘要 编写正确的并发程序对我来说是一件极其困难的事情,由于知识不足,只知道synchronized这个修饰符进行同步. 本文为学习极客时间:Java并发编程实战 01的总结,文章取图也是来自于该文章 并发Bug源头 在计算机系统中,程序的执行速度为:** CPU > 内存 > I/O设备 ** ,为了平衡这三者的速度差异,计算机体系机构.操作系统.编译程序都进行了优化: 1.CPU增加了缓存,以均衡和内存的速度差异 2.操作系统增加了进程.线程,已分时复用CPU,以均衡 CPU 与 I/O 设…
今年运气比较好,学了cuda之后,了解到了gpu的另两种使用语言opencl和openacc,  opencl(Open Computing Language ,开放计算语言)是面向异构系统的并行编程语言的免费标准,支持多种设备,包含CPU(多核多线程CPU),GPU(NVIDIA,AMD),数字信号处理器(居然还支持DSP),但缺点是对源代码进行并行改进的代码量较大:  OpenACC与cudac和opencl不同,不需要学习相对更底层的东西,不需要对代码进行很大的改进,在代码中间加上相应的指…
线程安全性 编写线程安全的代码实质上就是管理对状态的访问,而且通常都是共享的,可变的状态. 一个对象的状态就是他的数据,存储在状态变量中,比如实例域或静态域.所谓共享是指一个对象可以被多个线程访问:所谓可变是指变量 的值在其生命周期之内可以改变. 无论何时只要多于一个线程访问给定的状态变量,而且其中的某个线程会写入该变量,此时必须使用同步来协调该线程对该变量的访问.java中首要 的同步机制是synchronized的关键字,它提供了独占锁.除此之外,术语“同步”还包括volatile关键字,显…
4.1设计线程安全的类 包含三个基本要素: 1.找出构成对象状态的所有变量 2.找出约束状态变量的不变性条件 2.简历对象状态的并发访问管理策略 对象的状态: 域 基本类型所有域, 引用类型包括被引用对象的域 同步策略:不违背对象不变条件下对其状态的访问进行协同. 同步策略规定了如何将不可变性,线程封闭,加锁机制结合起来维护线程的安全性,并且规定了那些变量由哪些锁保护,最好写正式文档. 1.收集同步需求 不变性条件中包含多个变量,任何访问相关变量的操作都需要持有保护这些变量的锁. 2.依赖状态的…
3.1 可见性 synchronized 不仅实现了原子性操作或者确定了临界区,而且确保内存可见性. *****必须在同步中才能保证:当一个线程修改了对象状态之后,另一个线程可以看到发生的状态变化. 1.失效值问题 以上类非线程安全,get和set在非同步情况下获取value值. 当一个线程修改value,另一个线程可能得到更新后的值,也可能得不到. 对get和set进行同步,可以是成为线程安全类. 2. long或者double 需要用volatile修饰或者用锁保护. 因为64位值可能被拆为…