Java-框架与多线程
五柳-先生
宅边有五柳树,因以为号焉。
展开
-
Java线程(四):线程中断、线程让步、线程睡眠、线程合并
本文来自:高爽|Coder,原文地址:http://blog.csdn.net/ghsau/article/details/17560467,转载请注明。 最近在Review线程专栏,修改了诸多之前描述不够严谨的地方,凡是带有Review标记的文章都是修改过了。本篇文章是插进来的,因为原来没有写,现在来看传统线程描述的不太完整,所以就补上了。理解了线程同步和线程通信之后,再来看本文转载 2014-07-19 10:13:46 · 506 阅读 · 0 评论 -
Spring 框架的设计理念与设计模式分析
Spring 的骨骼架构Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图:图 1 .Spring 框架的总体架构图从上图中可以看出 Spring 框架中的核心组件只有三个:Core、Context 和 Beans。它们构建起了整个 Spring 的骨骼架构。没有它们就不可能有 AOP、Web 等上层的特性功能。下面也将主转载 2014-06-21 12:42:54 · 807 阅读 · 0 评论 -
Spring BeanFactory实例化Bean的过程
Bean的实例化是Bean生命周期的一个非常重要的环节,一般来说,初始化后,就不再改变了,直到bean被从BeanFactory中显式的移除。 当从BeanFactory中通过getBean()方法获取一个bean的时候,BeanFactory会经过如下的步骤来构建Bean的实例,这正是实例化Bean的过程: 1、调用Bean的默认构造方法,或者在指定的构造方法,生转载 2014-06-21 13:05:52 · 710 阅读 · 0 评论 -
Java线程:并发协作-生产者消费者模型
Java线程:并发协作-生产者消费者模型2009-11-04 13:59:05标签:消费者 生产者 休闲 职场原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lavasoft.blog.51cto.com/62575/221932Java线程:并发协作-生产者消费者模型 对于多线程程序转载 2014-06-21 13:32:51 · 623 阅读 · 0 评论 -
spring 3 中使用注解的方式来进行任务调度
在spring3 中的task 命名空间。可以部分去取代 quartz,并且支持注解方式。但是如果使用更加复杂的任务调度。还是建议是使用quartz。以下就使用 task 和 quartz来进行任务调度的方法进行距离。使用 注解来 来调度任务编写一个任务实例。[java] view plaincopy/****转载 2014-06-21 10:47:43 · 581 阅读 · 0 评论 -
spring中bean初始化过程
在传统的Java应用中,Bean的生命周期非常简单。Java的关键词new用来实例化Bean(或许他是非序列化的)。这样就够用了。相反,Bean 的生命周期在Spring容器中更加细致。理解Spring Bean的生命周期非常重要,因为你或许要利用Spring提供的机会来订制Bean的创建过程。1. 容器寻找Bean的定义信息并且将其实例化。 2.受用依赖注入,Spring按照Bean转载 2014-06-21 11:39:04 · 652 阅读 · 0 评论 -
Spring3.1 Cache注解
需要感慨一下,spring3.0时丢弃了2.5时的spring-modules-cache.jar,致使无法使用spring来方便的管理cache注解,好在3.1.M1中增加了对cache注解的支持,可喜可贺啊! 希望了解spring2.5的cache注解,可以参考如下内容:Spring基于注解的缓存配置--EHCache AND OSCacheSpring转载 2014-06-21 11:41:17 · 667 阅读 · 0 评论 -
Java线程:新特征-障碍器
Java线程:新特征-障碍器 Java5中,添加了障碍器类,为了适应一种新的设计需求,比如一个大型的任务,常常需要分配好多子任务去执行,只有当所有子任务都执行完成时候,才能执行主任务,这时候,就可以选择障碍器了。 障碍器是多线程并发控制的一种手段,用法很简单。下面给个例子: import java.util.concurrent.BrokenBarrierExcep转载 2014-06-21 13:23:44 · 575 阅读 · 0 评论 -
让并发和容错更容易:Akka示例教程
翻译:自由的柠檬原文链接:http://www.toptal.com/scala/concurrency-and-fault-tolerance-made-easy-an-intro-to-akka挑战写并发程序很难。程序员不得不处理线程、锁和竞态条件等等,这个过程很容易出错,而且会导致程序代码难以阅读、测试和维护。所以,很多人不倾向于使用多线程编程。取而代之的是,他们使用单线程进转载 2015-05-30 13:42:54 · 684 阅读 · 0 评论 -
Java多线程(二)之Atomic:原子变量与原子类
一、何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成) 在x86 平台上,CPU提供了在指令执行期转载 2015-11-02 23:48:30 · 563 阅读 · 0 评论 -
Java多线程(十)之ReentrantReadWriteLock深入分析
一、ReentrantReadWriteLock与ReentrantLock 说到ReentrantReadWriteLock,首先要做的是与ReentrantLock划清界限。它和后者都是单独的实现,彼此之间没有继承或实现的关系。ReentrantLock 实现了标准的互斥操作,也就是一次只能有一个线程持有锁,也即所谓独占锁的概念。前面的章节中一直在强调这个转载 2015-11-02 22:12:40 · 586 阅读 · 0 评论 -
Java多线程(一)之volatile深入分析
volatile 变量提供了线程的可见性,并不能保证线程安全性和原子性。什么是线程的可见性:锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥即一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性要更加复杂一些,它必须确保释放锁之前对共享数转载 2015-11-02 22:16:31 · 507 阅读 · 0 评论 -
Java线程Dump分析工具--jstack
jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack使用方式只支持以下的这种方式: jstack [-l][F] pid 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的转载 2015-12-21 09:32:15 · 588 阅读 · 0 评论 -
Java线程池中线程的状态简介
首先明确一下线程在JVM中的各个状态(JavaCore文件中)1.死锁,Deadlock(重点关注) 2.执行中,Runnable(重点关注) 3.等待资源,Waiting on condition(重点关注) 4.等待监控器检查资源,Waiting on monitor(eg:如果使用System.out.println等需要分配计算机资源的时候线程会如此等待转载 2015-12-21 09:36:06 · 6026 阅读 · 0 评论 -
JDK内置工具使用
JDK内置工具使用一、javah命令(C Header and Stub File Generator)二、jps命令(Java Virtual Machine Process Status Tool)三、jstack命令(Java Stack Trace)四、jstat命令(Java Virtual Machine Statistics Monitoring To转载 2015-12-21 10:00:05 · 377 阅读 · 0 评论 -
Java并发编程:synchronized
虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入不重复的数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。 以下是本文的目录大纲: 一.什么时候会出现线程安全问题? 二.如何解决线程安全问题? 三.synchronized同步方法或者同转载 2016-03-17 12:25:07 · 363 阅读 · 0 评论 -
Spring AOP 之编译期织入、装载期织入、运行时织入
一 前言 AOP 实现的关键就在于 AOP 框架自动创建的 AOP 代理,AOP 代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 AOP 框架提供的命令进行编译,从而在编译阶段就可生成 AOP 代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 AOP 动态代理类,因此也被称为运行时转载 2014-06-21 12:31:43 · 3233 阅读 · 0 评论 -
Spring FactoryBean,InitializingBean使用
Spring中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean。工厂Bean跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象。使用场景:1、通过外部对类是否是单例进行控制,该类自己无法感知 2、对类的创建之前进行初始化的操作,在afterPropertiesSet()中完成。实转载 2014-06-21 12:23:34 · 798 阅读 · 0 评论 -
Spring定时任务的几种实现
近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合spring框架来介绍。一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):Java自带的java.util.Timer类,这个类允许你调度一个java.util.T转载 2014-06-21 10:41:02 · 710 阅读 · 0 评论 -
spring定时任务+线池程实现
之前看了程序员杂志上关于spring 定时任务实现异步任务的文章,自己架了一套帮助实现一些费时的操作。在实现中发现几个问题 1、定时任务中时间设置是这样的Java代码 "delay" value="1000" /> 5秒--> "period" value="5000" /> 在某些配置下某任务开始后还没执行转载 2014-06-21 11:11:47 · 620 阅读 · 0 评论 -
用观查者模式传递线程状态
场景,某action把任务分配给N个线程,当线程完成后通知action,action返回。 Java代码 package com.koubei.Observable; import java.util.Observable; import java.util.Observer; public class Action impl转载 2014-06-21 11:14:11 · 534 阅读 · 0 评论 -
Java线程:新特征-条件变量
条件变量是Java5线程中很重要的一个概念,顾名思义,条件变量就是表示条件的一种变量。但是必须说明,这里的条件是没有实际含义的,仅仅是个标记而已,并且条件的含义往往通过代码来赋予其含义。 这里的条件和普通意义上的条件表达式有着天壤之别。 条件变量都实现了java.util.concurrent.locks.Condition接口,条件变量的实例化是通过一个Lock对转载 2014-06-21 13:17:34 · 575 阅读 · 0 评论 -
Java线程:线程的调度-合并
Java线程:线程的调度-合并 线程的合并的含义就是将几个并行线程的线程合并为一个单线程执行,应用场景是当一个线程必须等待另一个线程执行完毕才能执行时可以使用join方法。 join为非静态方法,定义如下:void join() 等待该线程终止。 void join(long millis) 等待该线程终止的时间转载 2014-06-21 13:26:24 · 456 阅读 · 0 评论 -
JAVA线程间的状态转换
线程间的状态转换: 1. 新建(new):新创建了一个线程对象。2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(running):可运行状态(runnable)的线程获得了cpu 时间片(timeslice)转载 2014-06-21 11:24:00 · 527 阅读 · 0 评论 -
Spring中bean的生命周期
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Singleton模式产生单一实例,对单线程的程序说并不会有什么问题,但对于多线程的程序,就必须注意安全(Thread-safe)的议题,防止多个线程转载 2014-06-21 11:37:13 · 624 阅读 · 0 评论 -
Spring 多线程
1.了解 TaskExecutor接口 Spring的TaskExecutor接口等同于java.util.concurrent.Executor接口。 实际上,它存在的主要原因是为了在使用线程池的时候,将对Java 5的依赖抽象出来。 这个接口只有一个方法execute(Runnable task),它根据线程池的语义和配置,来接受一个执行任务。最初创建TaskExecutor是为了在转载 2014-06-21 11:02:09 · 576 阅读 · 0 评论 -
Java并发编程:Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。 也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchroni转载 2016-03-17 12:28:08 · 361 阅读 · 0 评论