随笔分类 -  java多线程

java 多线程12 : 无锁 实现CAS原子性操作----原子类
摘要:由于java 多线程11:volatile关键字该文讲道可以使用不带锁的情况也就是无锁使变量变成可见,这里就理解下如何在无锁的情况对线程变量进行CAS原子性及可见性操作我们知道,在并发的环境下,要实现数据的一致性,最简单的方式就是加锁,保证同一时刻只有一个线程可以对数据进行操作。。。。例如一个计数器,我们可以用如下的方式来实现:public class Counter { private v... 阅读全文

posted @ 2017-03-23 18:02 signheart 阅读(1098) 评论(0) 推荐(0)

java多线程13 : 死锁
摘要:前言死锁单独写一篇文章是因为这是一个很严重的、必须要引起重视的问题。这不是夸大死锁的风险,尽管锁被持有的时间通常很短,但是作为商业产品的应用程序每天可能要执行数十亿次获取锁->释放锁的操作,只要在这数十亿次操作中只要有一次发生了错误,就可能导致程序中发生死锁,并且即使通过压力测试也不可能找出所有潜在的死锁。 死锁一个经典的多线程问题。当一个线程永远地持有一个锁,并且其他线程都尝试去获得这个锁时,那... 阅读全文

posted @ 2017-03-23 18:02 signheart 阅读(291) 评论(0) 推荐(0)

java 多线程9 : synchronized锁机制 之 代码块锁
摘要:synchronized同步代码块用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用synchronized同步语句块来解决问题。看一下例子:下面例子是优化后的例子 使用代码块锁,原先例子是方法锁,就是同步 必须要执行2个for public class ThreadDomain18 ... 阅读全文

posted @ 2017-03-23 18:01 signheart 阅读(19251) 评论(1) 推荐(0)

java 多线程11:volatile关键字
摘要:直接先举一个例子普通的线程实例变量的非可见性:public class MyThread28 extends Thread { private boolean isRunning = true; public boolean isRunning() { return isRunning; } public void setRunning(... 阅读全文

posted @ 2017-03-23 18:01 signheart 阅读(272) 评论(0) 推荐(1)

java 多线程10:synchronized锁机制 之 锁定类静态方法 和锁定类.Class 和 数据String的常量池特性
摘要:同步静态方法 synchronized还可以应用在静态方法上,如果这么写,则代表的是对当前.java文件对应的Class类加锁。看一下例子,注意一下printC()并不是一个静态方法: publicclass ThreadDomain25 { public synchronized static v 阅读全文

posted @ 2017-03-23 18:01 signheart 阅读(2683) 评论(1) 推荐(0)

java 多线程6: 中断机制 优雅的终止java线程
摘要:前文 java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())使用 interrupt() 和 interrupted() 判断来终止线程public class Run { public static void main(String[] args) { try { ... 阅读全文

posted @ 2017-03-23 18:00 signheart 阅读(457) 评论(0) 推荐(0)

java 多线程8 : synchronized锁机制 之 方法锁
摘要:脏读一个常见的概念。在多线程中,难免会出现在多个线程中对同一个对象的实例变量或者全局静态变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数据其实是被更改过的。注意这里 局部变量是不存在脏读的情况多线程线程实例变量非线程安全看一段代码:public class ThreadDomain13 { private int num = 0; ... 阅读全文

posted @ 2017-03-23 18:00 signheart 阅读(8527) 评论(0) 推荐(0)

java 多线程5: java 终止线程及中断机制 (stop()、interrupt() 、interrupted()、isInterrupted())
摘要:JAVA中有3种方式可以终止正在运行的线程①线程正常退出,即run()方法执行完毕了②使用Thread类中的stop()方法强行终止线程。但stop()方法已经过期了,不推荐使用③使用中断机制interrupt()1.stop()方法stop()在java多线程中已经废弃1.stop()方法会导致释放锁的不良后果,数据不完整比如一个上锁了得方法:threadA线程拥有了监视器,这些监视器负责保护某... 阅读全文

posted @ 2017-03-23 18:00 signheart 阅读(1390) 评论(2) 推荐(0)

java 多线程7: (suspend方法与resume方法) 挂起与恢复
摘要:suspend方法与resume 是 实例方法,已废弃缺点一:会造成独占,从而造成死锁缺点二:会造成数据不同步,不能保证数据原子性 阅读全文

posted @ 2017-03-23 18:00 signheart 阅读(1474) 评论(0) 推荐(0)

java 多线程2:Thread的实例方法
摘要:Thread类中的方法调用方式:学习Thread类中的方法是学习多线程的第一步。在学习多线程之前特别提出一点,调用Thread中的方法的时候,在线程类中,有两种方式,一定要理解这两种方式的区别:1、this.XXX() 和 线程对象实例.XXX() 这里要首先参考 多线程 Thread.currentThread().getName() ,对象实例.getName() 和 this.getNam... 阅读全文

posted @ 2017-03-23 17:59 signheart 阅读(289) 评论(0) 推荐(0)

Thread.currentThread().getName() ,对象实例.getName() 和 this.getName()区别
摘要:首先要明白 this.XXX 的使用场景 使用Thread.currentThread().getName()和使用this.getName()和对象实例.getName(),都可以得到线程的名称,但是使用this调用getName()方法只能在本类中,而不能在其他类中,更不能在Runnable接口中,所以只能使用Thread.currentThread().getName()获取线程的名称,否则... 阅读全文

posted @ 2017-03-23 17:59 signheart 阅读(12671) 评论(3) 推荐(3)

java 多线程4: java线程的优先级
摘要:Java线程的优先级取值范围是1 (Thread.MIN_PRIORITY ) 到 10 (Thread.MAX_PRIORITY )。如果没有设置, 线程默认的优先级是NORM_PRIORITY。这个值是5。getPriority()和setPriority(int newPriority) 是实例方法这两个方法用于获取和设置线程的优先级,优先级高的CPU得到的CPU资源比较多,设置优先级有助于... 阅读全文

posted @ 2017-03-23 17:59 signheart 阅读(616) 评论(0) 推荐(0)

java 多线程1:进程与线程概述
摘要:进程和线程谈到多线程,就得先讲进程和线程的概念。进程进程可以理解为受操作系统管理的基本运行单元。360浏览器是一个进程、WPS也是一个进程,正在操作系统中运行的".exe"都可以理解为一个进程线程进程中独立运行的子任务就是一个线程。像QQ.exe运行的时候就有很多子任务在运行,比如聊天线程、好友视频线程、下载文件线程等等。 为什么要使用多线程如果使用得当,线程可以有效地降低程序的开发和维护等成本,... 阅读全文

posted @ 2017-03-23 17:59 signheart 阅读(327) 评论(0) 推荐(0)

java 多线程3:Thread类中的静态方法
摘要:Thread类中的静态方法Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程"。为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作。下面来看一下Thread类中的静态方法:1、currentThread()currentThread()方法返回的是对当前正在执行线程对象的引用。看一个重要的例子,然后得出结论:public class MyTh... 阅读全文

posted @ 2017-03-23 17:59 signheart 阅读(580) 评论(0) 推荐(0)

锁、状态依赖与协同以及锁优化
摘要:从谈Java并发开始synchronized和锁就时常被谈到,上篇讲Java内存模型特点的时候,也说道用synchronized几乎可以同时满足原子性、可见性和有序性三点,那本篇就来说一下锁的概念、synchronized和API层面Lock锁框架的比较选择。后面也会讲到状态依赖与协同问题、条件队列和锁优化。0. 先说说synchronized。synchronized关键字可谓是并发里的常见词,... 阅读全文

posted @ 2017-03-23 17:58 signheart 阅读(501) 评论(0) 推荐(0)

线程池
摘要:服务器应用程序经常需要处理执行时间很短而数目巨大的请求, 如果为每一个请求创建一个新的线程, 会导致一些问题的出现, 如:1. 性能瓶颈. 线程的创建和销毁需要执行大量的后台操作, 如果单个请求的执行时间很短, 有可能花在创建和销毁线程上的时间大于真正执行请求的时间.2. 可能会导致资源不足. 大量的并发请求意味着需要创建大量的线程, 过多的线程存在会吞噬大量的系统资源, 而且CPU需要在这些线程... 阅读全文

posted @ 2017-03-23 17:58 signheart 阅读(372) 评论(0) 推荐(0)

可重入锁
摘要:摘要从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。场景1:如果发现该操作已经在执行中则不再执行(有状态执行)a、用在定时任务时,如果任务执行时间可能超过下次计划执行时间,确保该有状态任务只有一个正在执行,忽略重复触发。b、用在界面交互时点击执行较长时间请求操作时,防止多次点击导致后台重复执行(忽略重复触发)。以上两种情况多用于进行非重要任务防止重复执行,(如:... 阅读全文

posted @ 2017-03-23 17:58 signheart 阅读(384) 评论(0) 推荐(0)

java timer timertask mark
摘要:其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了run方法的一个类,而具体的TimerTask需要由你自己来实现,例如这样:123456Timer timer = new Timer();timer.schedule(new TimerTask() { public void run() { System.out.println("ab... 阅读全文

posted @ 2017-03-23 17:58 signheart 阅读(237) 评论(0) 推荐(0)

锁与theadLocal的合并使用
摘要:package cn.com.do1.component.yopin.util;import cn.com.do1.common.exception.BaseException;import cn.com.do1.common.framebase.dqdp.IBaseDAO;import cn.com.do1.component.ordermanage.order.model.Tb91OrderI... 阅读全文

posted @ 2017-03-23 17:58 signheart 阅读(448) 评论(0) 推荐(0)

java 中的 ThreadLocal
摘要:首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的,一般情况下,通过ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。各个线程中访问的是不同的对象。 另外,说ThreadLocal使得各线程能够保持各自独立的一个对象,并不是通过ThreadLocal.set()来实现的,而是通过每个线程中的new 对象 的操作来创建的... 阅读全文

posted @ 2017-03-23 17:57 signheart 阅读(258) 评论(0) 推荐(0)

导航