- 博客(18)
- 资源 (6)
- 问答 (5)
- 收藏
- 关注
原创 servlet中请求转发(forword)与重定向(sendredirect)的区别
servlet请求转发与重定向的区别:request.setAttribute("test","hello");request.getRequestDispacther("/test.jsp").forword(request,response); response.sendRedirect("test.jsp");一、显示结果:1、当用request.getRequestDi
2017-03-29 14:16:44 516
原创 使用Executors工厂类创建线程池
接口Executor仅仅是一种规范,是一种声明,是一种定义,并没有实现任何的功能,所以大多数的情况下,需要使用接口的实现类来完成指定的功能,比如ThreadPoolExecutor类就是Executor的实现类,但ThreadPoolExecutor在使用上并不是那么方便,在实例化时需要传入很多歌参数,还要考虑线程的并发数等与线程池运行效率有关的参数,所以官方建议使用Executors工程类来创建
2017-03-25 23:17:35 1516
原创 Executor接口介绍
在开发服务器端软件项目时,软件经常需要处理执行时间很短而数目却非常巨大的请求,如果为每一个请求创建一个新的线程,会导致性能上的瓶颈,因为线程对象的创建和销毁需要JVM频繁地进行处理,如果请求的执行时间很短,可能花在创建和销毁线程对象上的时间大于正真执行任务的时间,若这样,则系统性能大幅降低。在JDK5中提供了线程池的支持,主要的作用就是支持高并发的访问处理,并且可以将线程对象进行复用。核心原理
2017-03-25 20:05:44 588
转载 java序列化一定要应该注意的6个事项!
1、如果子类实现Serializable接口而父类未实现时,父类不会被序列化,但此时父类必须有个无参构造方法,否则会抛InvalidClassException异常。2、静态变量不会被序列化,那是类的“菜”,不是对象的。3、transient关键字修饰变量可以限制序列化。4、虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID
2017-03-21 12:43:51 805
原创 Exchanger的使用
类Exchanger的功能可以使2个线程之间传输数据,它比生产者/消费者模式使用的wait/notify要更加方便。所以本次将介绍此类在2个线程之间传递任意数据类型的数据,Exchanger类的使用与结构相当简单,主要的学习点就是exchange()方法。方法exchange()阻塞的特性类Exchanger中的exchange()方法具有阻塞的特色,也就是次方法被调用后等待其他线程来取数
2017-03-21 12:31:06 653
原创 Semaphore的使用之-多生产者-多消费者模式
本实验的目的不光是要实现生产者与消费者模式,还要限制生产者与消费者的数量,这样代码的复杂性就提高一些,但好在使用Semaphore类实现这个功能还是比较简单的。创建实验用的项目repastTest,类RepastService.java代码如下:
2017-03-21 00:05:30 1278
原创 Semaphore创建字符串池
类Semaphore可以有效地对并发执行任务的线程数量进行限制,这样功能可以应用在pool池技术中,可以设置同时访问pool池中数据的线程数量。本实验的功能是同时又若干个线程可以访问池中的数据,但同时只有一个线程可以获得数据,使用完毕后在放回池中。创建实验用的项目Semaphore_Pool_list,类ListPool.java代码如下:package com.yc.semephor
2017-03-20 00:04:48 434
原创 Semaphore的使用之-(多进路-多处理-多出路)和(多进路-单处理-多出路)
多进路-多处理-多出路本实现的目标是允许多个线程同时处理任务,更具体来讲,也就是每个线程都在处理自己的任务。创建实验用的项目Semaphore_MoreToOne_1,类Service.java代码如下:package com.yc.semephore_4_1;import java.util.concurrent.Semaphore;public class Service
2017-03-19 22:57:00 493
原创 Semaphore的使用之方法tryAcquire()的使用
无参方法tryAcquire()的作用是尝试的获得1个许可,如果获取不到则返回false,该方法通常与if语句结合使用,其具有无阻塞的特点。无阻塞的特点可以使线程不至于在同步处一直持续等待的状态,如果if语句判断不成立则线程会继续走slse语句,程序会继续向下运行。创建Java项目Semaphore_tryAcquire,MyService.java代码如下:package com.yc.
2017-03-19 22:20:07 20982 1
原创 Semaphore的使用之-公平与非公平信号量的测试
有些时候,获得许可的顺序与线程启动的顺序有关,这时信号量就要分为公平与非公平的。所谓的公平信号量是获得锁的顺序与线程启动顺序有关,但不代表100%地获得信号量,仅仅是在概率上能得到保证。而非公平信号量就是无关的了。创建测试用的项目semaphoreFairTest,类MyService.java代码如下:package com.yc.semephore_2;import java.
2017-03-19 21:06:04 1903
原创 类Semaphore的同步性
单词Semaphore的中文含义是信号、信号系统意思。此类的主要作用是限制线程并发的数量,如果不限制线程并发的数量。,则CPUD的资源很快就会被耗尽,每个线程执行的任务相当缓慢,因为CPU要把时间片分配给不同的线程对象,而且上下文切换也要耗时,最终造成系统运行效率大幅降低,所以限制并发线程的数量还是非常有必要的。在生活中也存在这种场景,比如一个生产键盘的生产商,发布了10个代理销售许可,所有最
2017-03-16 13:33:54 542
原创 为何stop()和suspend()方法不推荐使用
stop()方法作为一种粗暴的线程终止行为,在线程终止之前没有对其做任何的清除操作,因此具有固有的不安全性。 用Thread.stop()方法来终止线程将会释放该线程对象已经锁定的所有监视器。如果以前受这些监视器保护的任何对象都处于不连贯状态,那么损坏的对象对其他线程可见,这有可能导致不安全的操作。 由于上述原因,因此不应该使用stop()方法,而应该在自己的Thread类中置入一个标志,用于
2017-03-14 23:10:26 470
原创 线程的生命周期
1.线程的生命周期线程是一个动态执行的过程,它也有一个从产生到死亡的过程。(1)生命周期的五种状态 新建(new Thread)当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。例如:Thread t1=new Thread();就绪(runnable)线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中
2017-03-14 22:59:03 366
转载 剖析为什么在多核多线程程序中要慎用volatile关键字?
主要内容有:1. C/C++中的volatile关键字2. Visual Studio对C/C++中volatile关键字的扩展3. Java/.NET中的volatile关键字4. Memory Model(内存模型)5. Volatile使用建议1. C/C++中的volatile关键字1.1 传统用途C/C++作为系统级语言,它们与硬件的联系是很紧
2017-03-14 22:21:40 1123
原创 并行编程中的“锁”难题
在并行程序中,锁的使用会主要会引发两类难题:一类是诸如死锁、活锁等引起的多线程Bug;另一类是由锁竞争引起的性能瓶颈。本文将介绍并行编程中因为锁引发的这两类难题及其解决方案。1. 用锁来防止数据竞跑在进行并行编程时,我们常常需要使用锁来保护共享变量,以防止多个线程同时对该变量进行更新时产生数据竞跑(Data Race)。所谓数据竞跑,是指当两个(或多个)线程同时对某个共享变量进行操
2017-03-14 22:19:24 629
原创 为什么程序员需要关心顺序一致性(Sequential Consistency)而不是Cache一致性(Cache Coherence?)
本文所讨论的计算机模型是Shared Memory Multiprocessor,即我们现在常见的共享内存的多核CPU。本文适合的对象是想用C++或者Java进行多线程编程的程序员。本文主要包括对Sequential Consistency和Cache Coherence的概念性介绍并给出了一些相关例子,目的是帮助程序员明白为什么需要在并行编程时关注Sequential Consistency。
2017-03-14 22:15:59 811
原创 多线程程序中操作的原子性
多线程程序中操作的原子性0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全的?3. 程序员该如何使用原子操作?1. 多线程环境下对变量的
2017-03-14 22:13:23 661
原创 设计模式-共享模式/享元模式(Flyweight模式)
Flyweight定义:避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。为什么使用共享模式/享元模式面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得很庞大,比如,字处理软件,如果以每个文字都作为一个对象,几千个字,对象数就是几千,无疑耗费内存,那么我们还是要"求同存异",找出这些对象群的共同点,设计一个元类,封装可以被共享的类,
2017-03-01 23:35:13 571
emacs-25-x86_64-deps.zip
2018-06-20
win64_ssl_curl 插件
2018-03-16
windows系统换linux系统硬盘少了100G,现在怎么搞
2019-01-13
springboot配置thymeleaf
2018-08-06
会MYSQL来,数据库大神诉进
2017-09-28
Linux系统进入界面失败
2017-04-06
2-3树是B树的特例吗?
2016-12-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人