
线程
文章平均质量分 95
起一个好听的名字
学无止境,学海无涯,乐在其中
展开
-
java自带线程池和队列详细讲解
一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。二:线程池线程池的作用:线程池作用就是限制系统中执行线程的数量。转载 2016-01-18 21:08:20 · 294 阅读 · 0 评论 -
java中BlockingQueue 的使用
importJava.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.BlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; /** 本例介绍一个特转载 2016-05-06 13:33:18 · 319 阅读 · 0 评论 -
Java:使用Executors创建和管理线程
1. 类 Executors此类中提供的一些方法有:1.1 publicstatic ExecutorService newCachedThreadPool()创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能。 1.2 publicstatic ExecutorService newFi转载 2016-05-06 13:46:50 · 716 阅读 · 0 评论 -
Java多线程之-----实现自己的ThreadFactory
实现ThreadFactory接口生成自定义的线程在面向对象编程的世界中,工厂模式(factory pattern)是一个被广泛使用的设计模式。它是一个创建模式,它的目的是开发一个类,这个类的使命是创建一个或多个类的对象。然后,当我们要创建一个类的一个对象时,我们使用这个工厂而不是使用new操作。使用这个工厂,我们集中对象的创建,获取容易改变创建对象的类的优势,或我们创建这些对象的方式转载 2016-05-06 18:58:57 · 664 阅读 · 0 评论 -
Java四种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。转载 2016-07-19 10:05:31 · 336 阅读 · 0 评论 -
线程间通信方式(wait和notify的使用)
线程间的相互作用 线程间的相互作用:线程之间需要一些协调通信,来共同完成一件任务。 Object类中相关的方法有两个notify方法和三个wait方法: http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html 因为wait和notify方法定义在Object类中,因此会被所有的类所继承。 这些方法都转载 2016-07-19 10:43:03 · 370 阅读 · 0 评论 -
java中,如何安全的结束一个正在运行的线程?
如何等待一个线程结束。那么如果不希望等待线程结束,而是根据问题的需要随时都要中断线程使其结束,这种对线程的控制方法该如何实现呢? 解决思路 首先必须先明确“中断”这个概念的实际含义,这里的中断是指一个线程在其任务完成之前被强行停止,提前消亡的过程。查阅JDK的帮助文档,可以找到这样一个和中断有关的方法:interrupt()。 它的语法格式如下所示: public void转载 2016-08-03 13:54:19 · 3598 阅读 · 0 评论 -
多线程之UDP实例
package Socket;import java.net.DatagramPacket;import java.net.InetAddress;public class Dgram { public static DatagramPacket toDatagram(String s, InetAddress destIA, int destPort)转载 2016-08-02 14:03:52 · 425 阅读 · 0 评论 -
Java中对象锁和类锁举例
Java的锁分为对象锁和类锁。 1. 当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内针对该对象的操作只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 2. 然而,另一个线程仍然可以访问该object中的非synchronized(this)同步代码块。 3. 尤其关键的是,当一个转载 2017-07-05 09:37:12 · 330 阅读 · 0 评论 -
java的锁机制
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在Java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁转载 2017-07-05 10:04:43 · 183 阅读 · 0 评论 -
Java并发编程:Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronized的转载 2017-07-19 16:50:44 · 183 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。以下是本文目录大纲:一.对ThreadLocal的理解二.深入解析ThreadLocal类三.ThreadLocal的应用转载 2017-07-25 14:11:08 · 222 阅读 · 0 评论 -
线程栈模型与线程的变量
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。 线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。下面通过一个示例性的代码说明线程(调用)栈的变化过程。 这幅图描述在代码执行到两个不同时刻1、2时候,虚拟机线程调用栈示意图。 当程转载 2017-11-13 16:47:10 · 234 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.CyclicBarr转载 2018-01-11 12:15:44 · 195 阅读 · 0 评论 -
ThreadPoolExecutor的拒绝策略RejectedExecutionHandler
概述原文地址 http://blog.youkuaiyun.com/qq_25806863/article/details/71172823在分析ThreadPoolExecutor的构造参数时,有一个RejectedExecutionHandler参数。RejectedExecutionHandler是一个接口:public interface RejectedExecutionHandler { ...转载 2018-05-30 15:40:51 · 1106 阅读 · 0 评论 -
使用java jstack查看程序线程阻塞点方便调试性能
首先查看java进程的Pid , 输入 pgrep java假设java的pid为5066 则将线程信息保存到5066.dump文件中,输入 jstack -F 5066 >5066.dump转载 2018-05-31 19:32:51 · 2497 阅读 · 0 评论 -
Java并发编程:阻塞队列
Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(Linke转载 2016-03-24 15:31:14 · 303 阅读 · 0 评论 -
Java并发编程:Callable、Future和FutureTask
Java并发编程:Callable、Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。 而自从Java 1.5开始,转载 2016-03-24 15:20:36 · 232 阅读 · 0 评论 -
ExecutorService中submit和execute的区别
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。 一、创建任务 任务就是一个实现了Runnable接口的类。创建的时候实run方法即可。 二、执行转载 2016-03-24 15:10:30 · 450 阅读 · 0 评论 -
Java并发编程:线程池
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?转载 2016-01-19 17:05:54 · 293 阅读 · 0 评论 -
什么是线程安全和线程不安全
首先要明白线程的工作原理,jvm有一个main memory,而每个线程有自己的working memory,一个线程对一个variable进行操作时,都要在自己的working memory里面建立一个copy,操作完之后再写入main memory。多个线程同时操作同一个variable,就可能会出现不可预知的结果。根据上面的解释,很容易想出相应的scenario。而用转载 2016-01-13 13:02:59 · 206 阅读 · 0 评论 -
Java多线程(二)
Java多线程前言:在上一节中,我们已经对Java的多线程进行了初步的了解;在这一节中,我们将继续深入地探讨Java多线程的更多知识点!线程堵塞,守护线程,线程组,经典线程同步问题:消费者与生产者问题还有是很难的线程池,那么请读者跟随笔者的脚步,进一步剖析多线程的更多知识!线程堵塞:Thread类中关于控制线程堵塞的相关方法:转载 2016-01-15 10:16:56 · 290 阅读 · 0 评论 -
七张图解读Java多线程
本节引言:如题,笔者把Java多线程一些概念性的东西以及一些基础的东西都归纳到这七张图中,其中囊括基本的多线程概念,创建线程,线程组,线程池,以及自定义简单的线程池,还附有代码,大家也可以像笔者一样,把这七张图mark后打印出来,偶尔回味回味~J2SE多线程 Part 1J2SE多线程 Part 2J2SE多线程 Part 3转载 2016-01-15 11:22:58 · 287 阅读 · 0 评论 -
Java 多线程 并发编程
一、多线程1、操作系统有两个容易混淆的概念,进程和线程。进程:一个计算机程序的运行实例,包含了需要执行的指令;有自己的独立地址空间,包含程序内容和数据;不同进程的地址空间是互相隔离的;进程拥有各种资源和状态信息,包括打开的文件、子进程和信号处理。线程:表示程序的执行流程,是CPU调度执行的基本单位;线程有自己的程序计数器、寄存器、堆栈和帧。同一进程中的线程共用相同的地址空间,同时共享进转载 2016-02-02 16:47:27 · 349 阅读 · 0 评论 -
[Java基础]多线程之并发性以及解决方法
首先演示一下并发性(关于并发性的解释建议看MSDN中.net部分相关的解释、感觉微软解释的很详细、不仅说了并发性 还有其他可能由多线程引发其他问题) 1 public class ThreadDemo2 { 2 public static void main(String[] args) { 3 TestThread1 thread = new TestTh转载 2016-02-03 15:08:21 · 309 阅读 · 0 评论 -
java多线程Future和Callable类示例分享
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。今天我们就来研究下Future和Callable的实现方法一,描写叙述 在多线程下编程的时候。大家可能会遇到一种需求,就是我想在我开启的线程都结转载 2016-02-03 15:48:04 · 464 阅读 · 0 评论 -
40个Java多线程问题小结
多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级,本文给大家分享40个Java多线程问题小结 的相关资料,需要的朋友可以参考下Java多线程是什么Java提供的并发(同时、独立)处理多个任务的机制。多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级。依我的理解,Java多线程完全就是为了提高C转载 2016-02-03 15:52:55 · 690 阅读 · 0 评论 -
java 多线程 CountDownLatch用法
CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。主要方法 public CountDownLatch(int count); public void countDown(); public void await() throws InterruptedException 构造方法参数指定了计数的次数转载 2016-03-03 16:22:04 · 255 阅读 · 0 评论 -
什么时候使用CountDownLatch
正如每个Java文档所描述的那样,CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在Java并发中,countdownlatch的概念是一个常见的面试题,所以一定要确保你很好的理解了它。在这篇文章中,我将会涉及到在Java并发编 程中跟CountDownLatch相关的以下几点:目录CountDownLatch是什么?C转载 2016-03-03 16:34:21 · 323 阅读 · 0 评论 -
Java实现多线程下载文件
package cn.me.test;import java.io.InputStream;import java.io.RandomAccessFile;import java.net.HttpURLConnection;import java.net.URL;/** * 多线程下载 * 1:使用RandomAccessFile在任意的位置写入数据。 * 2:需要转载 2016-03-04 10:49:07 · 416 阅读 · 0 评论 -
java实现http多线程下载,断点回复
下载工具我想没有几个人不会用的吧,前段时间比较无聊,花了点时间用java写了个简单的http多线程下载程序,纯粹是无聊才写的,只实现了几个简单的功能,而且也没写界面,今天正好也是一个无聊日,就拿来写篇文章,班门弄斧一下,觉得好给个掌声,不好也不要喷,谢谢!我实现的这个http下载工具功能很简单,就是一个多线程以及一个断点恢复,当然下载是必不可少的。那么大概先整理一下要做的事情:1、 连接资转载 2016-03-04 11:02:29 · 442 阅读 · 0 评论 -
Java多线程-并发协作(生产者消费者模型)
对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:1、生产者仅仅在仓储未满时候生产,仓满则停止生产。2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。3、当转载 2016-03-24 11:20:24 · 337 阅读 · 0 评论 -
生产者/消费者问题的多种Java实现方式
生产者/消费者问题的多种Java实现方式 实质上,很多后台服务程序并发控制的基本原理都可以归纳为生产者/消费者模式,而这是恰恰是在本科操作系统课堂上老师反复讲解,而我们却视而不见不以为然的。在博文《一种面向作业流(工作流)的轻量级可复用的异步流水开发框架的设计与实现》中将介绍一种生产者/消费者模式的具体应用。生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作转载 2016-03-24 11:30:14 · 395 阅读 · 0 评论 -
ThreadPoolExecutor
java.util.concurrent类 ThreadPoolExecutorjava.lang.Object 继承者 java.util.concurrent.AbstractExecutorService 继承者 java.util.concurrent.ThreadPoolExecutor所有已实现的接口: Executor, Execut转载 2016-03-24 12:49:19 · 501 阅读 · 0 评论 -
java中ReentrantReadWriteLock读写锁的使用
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象。 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时读,但不能同时写,那就上读锁;如果你的代码修改数据,只能有...转载 2018-08-10 16:57:12 · 301 阅读 · 0 评论