![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发编程
钟shi杰
信息与计算科学专业
展开
-
Java并发编程(一)线程的定义、状态、属性
1. 线程的定义、状态、属性进程是指一段正在执行的程序。而线程有时也被称为轻量级的进程,他是程序执行的最小单元。一个进程可以拥有多个线程,各个线程之间共享程序的内存空间(代码段、数据段和堆空间)及一些进程级的资源(例如打开的文件),但是各个线程都拥有自己的栈空间1. 为何?从操作系统的角度而言: - 使用多线程可以减少程序的响应时间,如果某个操作很耗时,或者陷入长时间的等待,此时程序讲不会响原创 2017-08-17 17:01:34 · 205 阅读 · 0 评论 -
Java并发编程(二)同步
1. 锁对象Synchronizedsynchronized 关键字,代表这个方法加锁,相当于不管哪一个线程(例如线程A),运行到这个方法时,都要检查有没有其它线程B(或者C、 D等)正在用这个方法(或者该类的其他同步方法),有的话要等正在使用synchronized方法的线程B(或者C 、D)运行完这个方法后再运行此线程A,没有的话,锁定调用者,然后直接运行。它包括两种用法:synchronize原创 2017-08-22 14:35:41 · 202 阅读 · 0 评论 -
Java并发编程的暗自努力(二)走进代码
创建并运行Java线程Java线程是一个object类,它的实例都继承自java.lang.Thread或其子类创建线程的办法:Thread thread = new Thread();执行线程的办法thread.start();编写线程运行时的代码有两种方式:1. 创建Thread子类Step 1: 创建Thread子类并重写run方法,run方法在调用start()方法后被执行public cl原创 2017-08-27 10:23:08 · 193 阅读 · 0 评论 -
Java并发编程的暗自努力(一)初步介绍
本系列属于学习路径记录,学习的主要内容来自并发编程网1. Java的多线程和并发性Java从一开始就支持多线程,因此Java开发者能常遇到异常问题场景,比如: - 一个线程在读一个内存时,另一个线程正向该内存进行写操作,那进行读操作的那个线程会获得上面结果呢? - 两个线程同时写同一个内存,在操作完成后会是什么结果呢?2. 多线程的优点资源利用率好 场景:一个应用程序需要从本地文件系统中读取原创 2017-08-26 22:45:29 · 282 阅读 · 1 评论 -
Java并发编程的暗自努力(三)竞态和临界区
当多个线程访问了相同的资源(同一内存区、系统、文件)时可能会导致一些问题。 - 实际上,这些问题只有在一个或多个线程对这些资源进行了写操作时,才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的多个线程执行下面代码可能会出错:public class Counter{ protected long count = 0; public void add(long va原创 2017-08-27 16:19:25 · 213 阅读 · 0 评论 -
Java并发编程的暗自努力(四)线程安全与共享资源
允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。局部变量局部变量存储在自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以,基础类型的局部变量是线程安全的。public void someMethod(){ long threadSafeInt = 0;原创 2017-08-27 16:20:23 · 228 阅读 · 0 评论 -
Java并发编程(三)Volatile
1. java内存模型与原子性,可见性和有序性Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。 在java中,执行下面这个语句:int i=3;执行线程必须先在自己的工作线程中对变量i所在的缓存行进行赋值操作,然后再写入主存当中。而不是直接将数值3写入主存当中。原创 2017-08-23 17:07:58 · 193 阅读 · 0 评论 -
Java并发编程的暗自努力(五)Java内存模型
Java内存模型规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机是一个完整的计算机的模型。Java内存模型规定了如何、何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量Java内存模型内部原理Java内存模型把Java虚拟机内部划分为线程 栈 和 堆 栈每一个运行在Java虚拟机里的线程都拥有自己的线程栈一个线程创建的本地变量对其他线程不可见所有原原创 2017-08-28 09:43:31 · 227 阅读 · 0 评论