线程
LzwGlory
坚持自己的路
展开
-
ReentrantLock与synchronized (顶)
关于互斥锁:所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们通常使用synchronized机制控制多个线程对共享资源的访问. 而现在, Lock提供了比synchronized机制更广泛的锁定操作, Lock和synchronized机制的主要区别:synchronized机制提供了对与每个对象相关的隐式监视器锁的访问, 并强制所有锁获取和释放均要转载 2015-10-15 14:16:04 · 575 阅读 · 0 评论 -
最简实例说明wait、notify、notifyAll的使用方法
/*** 转载请注明作者longdick http://longdick.iteye.com**/ wait()、notify()、notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态。这三个方法最终调用的都是jvm级的native方法。随着jvm运行平台的不同可能有些许差异。 如果对象调用了w转载 2015-10-10 11:13:22 · 475 阅读 · 0 评论 -
多线程死锁问题
前天俺们谈到了加锁(线程同步),但是在使用加锁的同时又会带来一个问题,就是死锁。什么叫死锁?所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。发生死锁的原因一般是两个对象的锁相互等待造成的。那么为什么会产生死锁呢?1.因为系统资源不足。2.进程运行推进的顺序不合适。 3.资源分配不当原创 2015-10-14 10:23:12 · 607 阅读 · 0 评论 -
Java中的Runnable、Callable、Future、FutureTask的区别与示例
Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念,我们通过下面的简单示例来了解一下它们的作用于区别。Runnable其中Runnable应该是我们最熟悉的接口,它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值。然后使用某个线程去执行该runnable即可实现多线程,转载 2015-10-07 15:22:14 · 719 阅读 · 0 评论 -
Java中继承thread类与实现Runnable接口的区别
Java中线程的创建有两种方式: 1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中2. 通过实现Runnable接口,实例化Thread类 在实际应用中,我们经常用到多线程,如车站的售票系统,车站的各个售票口相当于各个线程。当我们做这个系统的时候可能会想到两种方式来实现,继承Thread类或实现Runnable接口,现在看转载 2015-10-07 15:21:04 · 669 阅读 · 0 评论 -
java自带线程池和队列详细讲解
Java线程池使用说明一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。二:线程池线程池的作用:线程池作用就是转载 2015-09-30 18:13:53 · 548 阅读 · 0 评论 -
Java并发编程:并发容器之CopyOnWriteArrayList
原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOn转载 2015-10-14 14:01:48 · 621 阅读 · 0 评论 -
Java中的ReentrantLock和synchronized两种锁定机制的对比
原文:http://www.ibm.com/developerworks/cn/java/j-jtp10264/index.html多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造转载 2015-10-15 11:10:43 · 439 阅读 · 0 评论 -
java.util.ConcurrentModificationException 解决办法
在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。则使用会报以下异常:java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)转载 2015-10-14 21:26:09 · 562 阅读 · 0 评论 -
java 中线程执行顺序控制
Thread t1 = new Thread(new Runnable() { @Override public void run() { System.out.println("t1"); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() {转载 2016-02-29 15:02:34 · 506 阅读 · 0 评论 -
JAVA多线程面试50题 -- 内容由浅及深,全会的是神 (顶)
本文由 ImportNew - 李 广 翻译自 javarevisited。欢迎加入Java小组。转载请参见文章末尾的要求。不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的转载 2016-02-29 15:14:12 · 647 阅读 · 0 评论 -
java 线程中yield的用法
Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。结论:yield()从未导致线程转到转载 2015-09-28 23:14:57 · 974 阅读 · 0 评论 -
Java总结篇系列:Java多线程(三)
本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题。一.一个典型的Java线程安全例子public class ThreadTest { public static void main(String[] args) { Account account = new Account("123456", 1000); DrawMone转载 2015-10-10 11:12:34 · 521 阅读 · 0 评论 -
Java并发编程:线程池的使用(顶)
在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 在Java中可以通过线程池转载 2015-10-22 17:01:19 · 513 阅读 · 0 评论 -
java.util.ConcurrentModificationException 异常解决办法及原理(顶)
最近在修程序的bug,发现后台抛出以下异常:Exception in thread "main" java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(Has转载 2015-10-23 10:24:47 · 2208 阅读 · 0 评论 -
Java ConcurrentModificationException 异常分析与解决方案(顶)
一、单线程1. 异常情况举例只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例:使用的数据集合:?1234567List m转载 2015-10-23 10:43:04 · 801 阅读 · 0 评论 -
线程池大小设置与BlockingQueue的三种实现区别(顶)
工作中多处接触到了ThreadPoolExecutor。趁着现在还算空,学习总结一下。 前记: jdk官方文档(javadoc)是学习的最好,最权威的参考。文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolSize和maximumPoolSize,BlockingQueue选型(Synch转载 2015-10-22 16:36:03 · 1874 阅读 · 0 评论 -
Java总结篇系列:Java多线程(一)
多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的。一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程也就基本上掌握了。主要包括:Java线程具有五中基本状态新建状态(New):当线程对象对创转载 2015-10-09 18:38:06 · 532 阅读 · 0 评论 -
java中wait和sleep的区别
通常,多线程之间需要协调工作。例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕。如果图片还没有下载完,displayThread可以暂停,当downloadThread完成了任务后,再通知displayThread“图片准备完毕,可以显示了”,这时,displayThread继续执行。以上逻辑简转载 2015-09-28 22:59:04 · 498 阅读 · 0 评论 -
Java总结篇系列:Java多线程(二)
四.Java多线程的阻塞状态与线程控制上文已经提到Java阻塞的几种具体类型。下面分别看下引起Java线程阻塞的主要方法。1.join()join —— 让一个线程等待另一个线程完成才继续执行。如A线程线程执行体中调用B线程的join()方法,则A线程被阻塞,知道B线程执行完为止,A才能得以继续执行。public class ThreadTest { publ转载 2015-10-09 18:58:55 · 478 阅读 · 0 评论 -
java join的用法
join的用法,先看几个例子在说。 程序1:public class ThreadTest implements Runnable { public static int a = 0; public synchronized void inc() { a++; } public void run() { for (int转载 2015-09-28 23:14:04 · 648 阅读 · 0 评论 -
Java中wait()与sleep()的区别
最近在做面试题的时候看到这道题,复习了一遍《Thinking in Java》,在此记录这个答案类的区别wait()来自于 java.lang.Object,任何对象都有此方法sleep()来自于 java.lang.Thread,调用的对象为线程用法上的区别看一下jdk的描述:wait():Causes the current thread to wa转载 2015-09-28 23:02:55 · 655 阅读 · 0 评论 -
java笔记--关于线程同步(5种同步方式)
为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。1.同步方法 即有synchronized关键字修饰的方法。 由转载 2015-10-12 11:35:50 · 508 阅读 · 0 评论 -
java线程池如何合理的设置大小
线程池究竟设置多大要看你的线程池执行的什么任务了,CPU密集型、IO密集型、混合型,任务类型不同,设置的方式也不一样任务一般分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池1、CPU密集型尽量使用较小的线程池,一般Cpu核心数+1因为CPU密集型任务CPU的使用率很高,若开过多的线程,只能增加线程上下文的切换次数,带来额外的开销2、IO密集型...转载 2019-03-25 17:20:31 · 284 阅读 · 0 评论