JAVA知识 简单记录-多线程

来源:互联网 发布:淘宝开书店 编辑:程序博客网 时间:2024/05/21 17:30

研究文章:

http://www.cnblogs.com/dolphin0520/p/3920373.html

http://blog.csdn.net/escaflone/article/details/10418651


一、内存模型概念:

程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。

二、并发编程中三个概念:

1、原子性 2、可见性 3、有序性

原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。

可见性:当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

有序性:即程序执行的顺序按照代码的先后顺序执行。

三、java 内存模型

Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存),每个线程都有自己的工作内存(类似于前面的高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存

四、volatile 关键字

一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

  1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

  2)禁止进行指令重排序。

volatile 具有可见性和有序性,不具有原子性.

volatile原理与机制:

1)它确保指令重排序时不会把其后面的指令排到内存屏障之前的位置,也不会把前面的指令排到内存屏障的后面;即在执行到内存屏障这句指令时,在它前面的操作已经全部完成;

2)它会强制将对缓存的修改操作立即写入主存;

3)如果是写操作,它会导致其他CPU中对应的缓存行无效。

五、synchronized 加锁机制

  1. public synchronized String pop(){  
  2.   this.notifyAll();// 唤醒对象等待池中的所有线程,可能唤醒的就是 生产者(当生产者发现产品满,就会进入对象的等待池,这里代码省略,基本略同)  
  3.    while(index == -1){//如果发现没产品,就释放锁,进入对象等待池  
  4.       this.wait();  
  5.    }//当生产者生产完后,消费者从this.wait()方法再开始执行,第一次还会执行循环,万一产品还是为空,则再等待,所以这里必须用while循环,不能用if  
  6.    String good = buffer[index];  
  7.    buffer[index] = null;  
  8.    index--;  
  9.    return good;// 消费完产品,退出。  

六、高级同步机制

1、Lock接口

2、ReadWriteLock

3、ReentrantLock 和 ReentrantReadWriteLock 实现类

  1. public class LockIdGenrator{  
  2. //new ReentrantLock(true)是重载,使用更加公平的加锁机制,在锁被释放后,会优先给等待时间最长的线程,避免一些线程长期无法获得锁  
  3.    private int ReentrantLock lock = ReentrantLock();  
  4.    privafte int value = 0;  
  5.    public int getNext(){  
  6.       lock.lock();      //进来就加锁,没有锁会等待  
  7.       try{  
  8.          return value++;//实际操作  
  9.       }finally{  
  10.          lock.unlock();//释放锁  
  11.       }  
  12.    }  
  13. }  

七、多线程的实现方式:

1、继承Thread类,重写run方法
2、实现Runable接口
3、
在J2SE5.0中,java.util.concurrent包提供了丰富的用来管理线程和执行任务的实现

a、Callable接口

b、Future接口
C、Executor接口、ExcutorServer接口、ScheduleExecutorService接口和CompletionService接口



0 0
原创粉丝点击