Java多线程入门
李晓LOVE向阳
这个作者很懒,什么都没留下…
展开
-
Java线程:并发协作-生产者消费者模型
Java线程:并发协作-生产者消费者模型 对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。 实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:1、生产者仅仅在仓储未满时候生产,仓满则原创 2016-09-09 08:49:03 · 303 阅读 · 0 评论 -
Java线程:线程的同步与锁
一、同步问题提出 线程的同步是为了防止多个线程访问一个数据对象时,对数据造成的破坏。例如:两个线程ThreadA、ThreadB都操作同一个对象Foo对象,并修改Foo对象上的数据。 public class Foo { private int x = 100; public int getX() {原创 2016-09-05 10:51:19 · 289 阅读 · 0 评论 -
Java线程:线程的调度-休眠
Java线程:线程的调度-休眠 Java线程调度是Java多线程的核心,只有良好的调度,才能充分发挥系统的性能,提高程序的执行效率。 这里要明确的一点,不管程序员怎么编写调度,只能最大限度的影响线程执行的次序,而不能做到精准控制。 线程休眠的目的是使线程让出CPU的最简单的做法之一,线程休眠时候,会将CPU资源交给其他线程,以便能轮换执行,当休眠一定原创 2016-09-06 11:33:49 · 260 阅读 · 0 评论 -
Java线程:线程的调度-优先级
Java线程:线程的调度-优先级 与线程休眠类似,线程的优先级仍然无法保障线程的执行次序。只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行。 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先级为5。 在一个线程中开启另外一个新线程,则新开线程称为该线程的子线程,子线程初始优先级与父线程相同。原创 2016-09-06 11:44:52 · 179 阅读 · 0 评论 -
Java线程:线程的调度-让步
Java线程:线程的调度-让步 线程的让步含义就是使当前运行着线程让出CPU资源,但是然给谁不知道,仅仅是让出,线程状态回到可运行状态。 线程的让步使用Thread.yield()方法,yield() 为静态方法,功能是暂停当前正在执行的线程对象,并执行其他线程。 /** * Java线程:线程的调度-让步 * * @author l原创 2016-09-06 13:50:33 · 196 阅读 · 0 评论 -
Java线程:线程的调度-合并
Java线程:线程的调度-合并 线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 join为非静态方法,定义如下:void join() 等待该线程终止。 void join(long millis) 等待该线程终止的原创 2016-09-06 14:14:46 · 236 阅读 · 0 评论 -
Java线程:线程的调度-守护线程
Java线程:线程的调度-守护线程 守护线程与普通线程写法上基本么啥区别,调用线程对象的方法setDaemon(true),则可以将其设置为守护线程。 守护线程使用的情况较少,但并非无用,举例来说,JVM的垃圾回收、内存管理等线程都是守护线程。还有就是在做数据库应用时候,使用的数据库连接池,连接池本身也包含着很多后台线程,监控连接个数、超时时间、状态等等。原创 2016-09-07 09:11:17 · 335 阅读 · 0 评论 -
Java线程:线程的同步-同步方法
Java线程:线程的同步-同步方法 线程的同步是保证多线程安全访问竞争资源的一种手段。线程的同步是Java多线程编程的难点,往往开发者搞不清楚什么是竞争资源、什么时候需要考虑同步,怎么同步等等问题,当然,这些问题没有很明确的答案,但有些原则问题需要考虑,是否有竞争资源被同时改动的问题? 在本文之前,请参阅《Java线程:线程的同步与锁》,本文是在此基础上所写原创 2016-09-07 09:23:26 · 225 阅读 · 0 评论 -
Java线程:线程的同步-同步块
Java线程:线程的同步-同步块 对于同步,除了同步方法外,还可以使用同步代码块,有时候同步代码块会带来比同步方法更好的效果。 追其同步的根本的目的,是控制竞争资源的正确的访问,因此只要在访问竞争资源的时候保证同一时刻只能一个线程访问即可,因此Java引入了同步代码快的策略,以提高性能。 在上个例子的基础上,对oper方法做了改动,由同步方法改为同步原创 2016-09-08 08:41:57 · 227 阅读 · 0 评论 -
Java四种线程池的使用
Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。转载 2018-04-11 14:31:46 · 125 阅读 · 0 评论 -
JAVA多线程实现的四种方式
Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。 1、继承Thread类创建线程Thread类本质上是实现了Runnable接...转载 2018-04-11 15:21:27 · 444 阅读 · 0 评论 -
Java多线程执行处理业务时间太久解决方法代码示例
背景:在政府开发了一个应用系统,主要功能是让企业填写企业资质信息,然后通过给定的公式,统计这一系列的信息,以得分的形式展示给政府领导查看。目前有1300家企业填报。由于得分是实时显示的,所以导致统计功能很慢。代码运行流程:1、查出1300企业信息2、遍历1300企业信息,ji计算每家企业得分信息。每家预计时间为0.3秒。合计390秒。导致页面请求超时3、导出(用jxl jar)转载 2018-04-11 15:54:31 · 6533 阅读 · 1 评论 -
同步synchronized用法
今天在高人的指导下,对同步synchronized用法有了更高一层的理解,非常感谢他的无私奉献。在此把代码贴出来方便日后查阅。 publicclass SfServlet { privatestatic ExpressInfoService expressInfoService=null; privatestatic Object lock =原创 2016-08-25 15:01:10 · 248 阅读 · 0 评论 -
多线程模拟实现生产者/消费者模型
题目如下: 在生产者/消费者模型中,生产者Producer负责生产数据,而消费者Consumer负责使用数据。多个生产者线程会在同一时间运行,生产数据,并放到内存中一个共享的区域。期间,多个消费者线程读取内存共享区,消费里面的数据。 分析在下面Java应用程序中,生产者线程向一个线程安全的堆栈缓冲区中写(PUSH)数据,消费者从该堆栈缓冲区中读(POP)数据,这原创 2016-08-25 14:51:09 · 2707 阅读 · 0 评论 -
多线程案例
1、写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。学习线程之间的通信协调关系。代码线程类Thread01package com.ljq.test;public class Thread01 implements Runnable { private Object obj; public原创 2016-09-12 09:35:40 · 470 阅读 · 0 评论 -
中断线程
中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程为中断状态,即设置为true。线程中断后的结果是死亡、还是等待新的任务或是继续运行至下一步,取决于这个程序本身。线程会不时地检测这个中断标识位,以判断线程是否应该被中断(中断标识值是否为true)。它并不像stop方法那样会中断一个正在运行的线程。判断线程是否被中断判断某个线程是否已被中断,请使用Thr原创 2016-09-12 16:59:03 · 1351 阅读 · 0 评论 -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列(先进先出)。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非阻塞队列的典型例子是ConcurrentLinkedQueue,在实际应用中要根据实际需要选用阻塞队列或者非阻塞队列。注:什么叫线程安全?这个首先要明确。线程安全就是说多线程访问同一代原创 2016-09-01 08:42:41 · 187 阅读 · 0 评论 -
Java线程:概念与原理
一、操作系统中线程和进程的概念现在的操作系统是多任务操作系统。多线程是实现多任务的一种方式。进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。比如在Windows系统中,一个运行的exe就是一个进程。 线程是指进程中的一个执行流程,一个进程中可以运行多个线程。比如java.exe进程中可以运行很多线程。线程总是原创 2016-09-01 08:57:14 · 222 阅读 · 0 评论 -
Java线程:volatile关键字
Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。 谈及到volatile关键字,不得不提的一篇文章是:《Java 理论与实践: 正确使用 Volatile 变量》,这篇文章对volatile关键字的用法做了原创 2016-09-13 09:18:25 · 248 阅读 · 0 评论 -
Java线程:新特征-线程池
Sun在Java5中,对Java线程的类库做了大量的扩展,其中线程池就是Java5的新特征之一,除了线程池之外,还有很多多线程相关的内容,为多线程的编程带来了极大便利。为了编写高效稳定可靠的多线程程序,线程部分的新增内容显得尤为重要。 有关Java5线程新特征的内容全部在java.util.concurrent下面,里面包含数目众多的接口和类, 当然新特征对做多线程原创 2016-09-13 10:41:25 · 261 阅读 · 0 评论 -
Java线程:创建与启动
一、定义线程 1、扩展java.lang.Thread类。 此类中有个run()方法,应该注意其用法:public void run()如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。 Thread 的子类应该重写该方法。2、实现java原创 2016-09-02 09:19:54 · 201 阅读 · 0 评论 -
Java线程:线程栈模型与线程的变量
要理解线程调度的原理,以及线程执行过程,必须理解线程栈模型。线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。 下面通过一个示例性的代码说明线程(调用)栈的变化过程。 这幅图描述在代码执行到两个不同时刻1、2时候,原创 2016-09-02 09:32:08 · 209 阅读 · 0 评论 -
Java线程:线程状态的转换
一、线程状态 线程的状态转换是线程控制的基础。线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。用一个图来描述如下: 1、新状态:线程对象已经创建,还没有在其上调用start()方法。 2、可运行状态:当线程有资格运行,但调度程序还没有把它选定为运行线程时线程所处的状态。当start()方法调用时,线程首先进入可运行状态。在原创 2016-09-02 11:47:05 · 222 阅读 · 0 评论 -
Java多线程入门
如何创建和理解线程 曾经在学习操作系统的时候,进程是一个重点内容,线程也学习过,但是没有什么深刻的印象。在Java多线程的学习中对线程有了一个全面而深刻的理解。一个进程可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索。 创建多线程有两种方法:继承Thread类和实现Runnable接口。通过调用继承thread对象的start()方法就可以调用该类中的run()方原创 2016-08-25 13:51:07 · 232 阅读 · 0 评论 -
多线程死锁问题
前天俺们谈到了加锁(线程同步),但是在使用加锁的同时又会带来一个问题,就是死锁。什么叫死锁?所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。发生死锁的原因一般是两个对象的锁相互等待造成的。那么为什么会产生死锁呢?1.因为系统资源不足。2.进程运行推进的顺序不合适。 3.资源分配不当。原创 2016-08-25 14:08:12 · 345 阅读 · 0 评论 -
java 方法超过执行时间后抛出异常
问题描述:近期由于搭建JMS服务,需要在发送消息后,等待30秒,从返回消息队列获取返回消息。但是从消息队列获取消息的方法是无限等待一直到获取消息,现在需要在三十秒之内获取到返回消息,如果超过三十秒则中断。解决思路:可以使用线程的方式。具体思路如下:使用ExecutorService、Callable、Future实现有返回结果的线程ExecutorService、Callable、Fu...原创 2018-08-01 17:21:53 · 9430 阅读 · 0 评论