![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java并发学习
lidongxiu0714
https://github.com/hpuzzuldx/
展开
-
进程线程的概念区别
以下内容来自于百度百科和自己的理解:1进程进程(Process)的抽象概念是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。程序是指令、数据及其组织形式的描述,进程是程序的实体。通常情况下window下一个exe就是一个进程,android中一个apk就是一个进程(也可以多进程)。进程的关键点:第一,进程是一个实体。每一个进程都有它...原创 2019-08-12 09:45:10 · 529 阅读 · 0 评论 -
Messenger 实现进程间通信IPC
AIDL可以实现进程间通信,但使用稍显复杂,Messenger也可以实现进程间通信,Messenger底层实现利用了 AIDL ,系统已经帮我们完成了Aidl的书写。Messenger可以在不同进程中传递 Message 对象,利用Handler一次只处理一个请求,不存在并发执行的情形。所以这是Messenger的优点,也是它的缺点,它无法用于大量的并发操作,但对于简单的进程间通信则十分好用。利用...原创 2019-09-01 10:23:50 · 258 阅读 · 0 评论 -
使用锁实现同步简单使用
如果想要static方法和普通的方法在同步情况下不能同时执行,单靠synchronized实现非常有难度,因为静态方法以class对象为锁,普通方法以具体的具体的对象为锁,java提供的另一种同步机制利用Lock接口及其实现类,比synchronized更加灵活。synchronized可以支持更灵活的同步代码块结构,synchronized只能在synchronized块结构中获取和释放锁,L...原创 2019-09-01 10:22:37 · 387 阅读 · 0 评论 -
synchronized实现同步
利用synchronized关键字是最简单的实现同步的方式,synchronized可以用于方法,代码块,synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见。也就是保证了临界区某一时刻只能被一个线程访问(被synchronized修饰的方法,或者代码块都是临界区)。当一个线程进入了临界区,其他试图访问该临界区...原创 2019-09-01 10:22:15 · 376 阅读 · 0 评论 -
影响线程执行的函数(sleep,join,yield,priority,daemon)
1 sleepsleep使当前线程睡眠指定的毫秒数(暂停执行),但由于系统计时器和调度方法的影响,时间不是那么精准。当线程在同步代码中持有monitor时,sleep不会导致线程释放已经获取的锁(虽然当前线程暂停了,但其他竞争线程依然无法获取锁)。会抛出线程中断异常,必须处理。到达指定之间之后,线程会自动苏醒,变为可运行状态而不是运行状态,所以sleep内的时间是线程休眠的最短时间。sle...原创 2019-09-01 10:20:48 · 468 阅读 · 0 评论 -
线程同步和同步原理
1 多线程问题,临界区单线程由于按顺序继承(即使存在编译器优化,指令重排等优化策略也会保证程序的正确执行),多线程情况下,如果存在共享资源的情况,就会出现并发问题。多个线程访问或者修改共享数据,会导致数据的不一致性,进而导致出错,线程同步机制就是用来防止错误发生的机制。临界区定义为访问共享资源的代码块,如果同一时间能够保证只有一个线程访问临界区,就不会发生错误。public class D...原创 2019-09-01 10:15:48 · 1545 阅读 · 0 评论 -
如何结束线程-线程中断
线程停止的方式:线程执行完毕,自然会停止异常退出设置了标志位,当标志位为false时退出线程中断退出线程函数执行完毕正常退出和发生异常被迫退出都不受我们控制,下面讨论控制线程停止的方式。设置退出标志位:package com.sync.demo;import javax.swing.text.html.HTML.Tag;public class Demo5 { pub...原创 2019-09-01 10:14:56 · 331 阅读 · 0 评论 -
线程间交互(wait notify)
1 线程间交互线程间的交互,也就是相互通知,进而达到相互控制,java中线程间的交互要用到java.lang.Object的类的三个方法分别是wait,notify(),notifyAll,三个方法的调用必须在同步环境内调用,也就是线程获取了对象的锁后才能调用。如果线程A持有线程B的对象的锁,多线程环境下只有当线程A获取了线程B的锁后(同步环境下)时,线程A才能调用B的wait,notify(...原创 2019-09-01 10:13:01 · 865 阅读 · 0 评论 -
Thread调用start和run的区别
学习Thread的第一天就知道要调用Thread的start方法,不要调用Thread额run方法,为什么呢?新建一个Thread类的实例,然后调用run方法,相当于调用普通的方法,属于当前线程的一个方法执行,可以重复多次调用,run方法运行结束, 此线程终止, 而CPU再运行其它线程。run()方法当作普通方法的方式调用,程序还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的...原创 2019-08-12 16:26:02 · 880 阅读 · 0 评论 -
线程的状态
线程的状态 public enum State { /** * Thread state for a thread which has not yet started. */ NEW, /** * Thread state for a runnable thread. A thread in...原创 2019-09-01 10:44:37 · 194 阅读 · 1 评论