多线程的一点点整理

1.synchronized

synchronized:实现线程同步,同步可以是某一方法或某一个代码块,获取对象锁,其他线程阻塞。

使用wait()释放对象锁,线程进入等待状态,wait()后面的代码将等待线程再次被唤醒时执行。

使用notify()随机唤醒一个处于wait()方法的线程,重新获取对象锁,使用notifyAll()唤醒所有处于wait()的线程,只不过多个处于wait()方法线程会竞争对象锁,谁拿到锁谁执行,具有不确定性。

2.Lock

 ReentrantLock lock = new ReentrantLock();//得到锁对象

 lock.lock();//获取对象锁,使得线程后面代码同步,其他线程阻塞

 lock.unlock();//释放锁

Condition condition = lock.newCondition();//得到等待对象

condition.await();//线程进入等待状态,await()后面的代码将等待线程再次被唤醒时执行。

condition.signal();//唤醒一个处于await()方法的线程,重新获取对象锁,这里只唤醒condition对象执行了await()的线程,不具有随机性

condition.signalAll();//唤醒所有处于await()的线程

时间: 2024-12-28 18:36:37

多线程的一点点整理的相关文章

实际项目中Java多线程模型的总结整理

分享一下最近项目中用到的多线程模型. 需要实现:根据租户填写的表单,自动部署ES集群,提供ES服务. 基本思路: 就是将一个事务生命周期分成不同的阶段,每个阶段都是用线程去负责执行. 目前主要分为四个阶段:事件监听阶段,事件提交阶段,执行器阶段,状态校验阶段 流程图如下: 线程分类: A.监听线程 B.工作线程 C.状态校验线程 D.执行器线程 原理图简单介绍: 1.AcceptorThread线程:监听操作对列表,将新产生的事件记录扔进事件分类器,并且同时往内存容器中添加一条记录. 2.事件分

我自己的Android面试试题总结整理

http://blog.sina.com.cn/s/blog_ad991b1601018mjc.html 2013-5-9号补充:今天最新的腾讯面试题,应该说是所有面试中最难的,我个人感觉.而且是个女面试官,好嗨皮啊,哈哈. 腾讯面试题 1.int a = 1; int result = a+++3<<2; 2.int a = 2; int result = (a++ > 2)?(++a):(a+=3); 3.int a = 1234567; int b = 0x06; int resu

从jvm的角度来看java的多线程

最近在学习jvm,发现随着对虚拟机底层的了解,对java的多线程也有了全新的认识,原来一个小小的synchronized关键字里别有洞天.决定把自己关于java多线程的所学整理成一篇文章,从最基础的为什么使用多线程,一直深入讲解到jvm底层的锁实现. 多线程的目的 为什么要使用多线程?可以简单的分两个方面来说: 在多个cpu核心下,多线程的好处是显而易见的,不然多个cpu核心只跑一个线程其他的核心就都浪费了: 即便不考虑多核心,在单核下,多线程也是有意义的,因为在一些操作,比如IO操作阻塞的时候

多线程学习 + o2o简识

多线程学习: ( 1.NSThread 2.NSOperationQueue 3.GCD ) 1.进程和线程: 进程:app无法独立运行,需要分配内存空间,每个app至少有一个进程,是应用程序的开始(缺点:不能同时执行) 线程:是应用程序运行的最小单元可以多个线程并发同时执行,防止主线程堵塞,增加运行效率. 主线程:又叫UI主线程,程序运行都是在主线程加载,加载视图,但不可加载数据,因为请求网络数据的时间特别长,会出现空白现象(更新UI一定要在主线程中写) 子线程:没法加载UI,UI只在主线程中

android面试

http://www.apkbus.com/android-115989-1-1.html 面试的几个回答技巧 http://blog.sina.com.cn/s/blog_ad991b1601018mjc.html 2013-5-9号补充:今天最新的腾讯面试题.应该说是全部面试中最难的.我个人感觉.并且是个女面试官.好嗨皮啊,哈哈. 腾讯面试题 1.int a = 1; int result = a+++3<<2; 2.int a = 2; int result = (a++ > 2)

linux创建与结束线程

打算写一些入门级别的多线程笔记,等我把多线程的函数都整理完再一点点添加(一下子全都搞上去,会有种抓不到重点的感觉) 线程创建函数pthread_create(4) int pthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); 参数: thread: 用于标识一个线程,它是一个pthread_t类型的变量,在头文件pthreadtypes.h中定义,如下所

转义符

前段时间学的知识,为免忘记,一点点整理. 转义符 代表的意义 \" 双引号 \' 单引号 \n 换行符 \t 制表符(相当于按下了Tab键) \\ 斜杠\ 在代码中书写一个斜杠(\)用于改变\后出现字符的意义. " " 代表字符串的开始和结束. \" 普通的双引号字符. 例: Tom said:" Hello !" Console.Write("Tom said :\"Hello!\" ") \t 制表符 例: 你 好 (相当于按下了Tab键) Console.Writeli

JVM GC算法 垃圾回收器

JVM的垃圾回收算法有三种: 1.标记-清除(mark-sweep):啥都不说,直接上图 2.标记-整理(mark-compact) 3.复制(copy) 分代收集算法                                                    目前的垃圾回收都采用分代收集算法.也就衍生了很多垃圾收集器 "分代收集"(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据各个年代的特点采用最适当的收集算法. 在新生

JVM学习(一)

一.gc日志查看与分析 在sever端的run.xml中run和debug中加入如下参数: <jvmarg value="-XX:+PrintGCDateStamps"/>        <jvmarg value="-XX:+PrintGCDetails"/>  <jvmarg value="-Xloggc:./gclogs"/>  启动server端后发现server文件夹下多了一个名为gclogs的文件.