多线程
文章平均质量分 72
kkvveeerer
记录是最好的回忆!
展开
-
笔试面试题——多线程
一.概念性问答题第一题:线程的基本概念、线程的基本状态及状态之间的关系? 第二题:线程与进程的区别? 这个题目问到的概率相当大,计算机专业考研中也常常考到。要想全部答出比较难。 第三题:多线程有几种实现方法,都是什么? 第四题:多线程同步和互斥有几种实现方法,都是什么? 我在参加2011年迅雷校园招聘时转载 2012-09-26 18:09:55 · 1117 阅读 · 0 评论 -
信号量 Semaphore的使用介绍
Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。 Sem原创 2012-11-21 11:40:50 · 1601 阅读 · 0 评论 -
线程工厂 ThreadFactory源码解读
工厂模式是我们学习编程时,接触到的第一个设计模式,也是最简单、最常用的一个设计模式。在JDK的源码中,大量使用工厂模式,ThreadFactory就是其中一种。在我们一般的使用中,创建一个线程,通常有两种方式:继承Thread类,覆盖run方法,实现我们需要的业务继承Runnable接口,实现run方法,实现我们需要的业务,并且调用new Thread(Runnable原创 2012-11-21 13:16:33 · 6889 阅读 · 1 评论 -
自定义线程工厂
JDK线程 池:Executors.newFixedThreadPool , Executors.newSingleThreadExecutor,由一个 ThreadFactory来创建新的线程,默认情况下为 Executors.defaultThreadFactory(),ThreadFactory接口public interface ThreadFactory { Thread n原创 2012-11-21 13:43:20 · 2473 阅读 · 0 评论 -
volatile域的使用
volatile关键字为对一个实例的域的同步访问提供了一个免锁机制。如果你把域声明为volatile,那么编译器和虚拟机就知道该域可能会被另一个线程并发更新有时候,只是为读写实例的一两个域就使用同步,其带来的开销似乎太大了。这种情况下可以使用volatile关键字例如,假设一个对象有一个布尔标记,由一个线程设置它的值,而由另一个线程来查询它,那么有以下两个方法1、使用锁,如下原创 2012-11-18 15:31:29 · 871 阅读 · 0 评论 -
内存屏障与JVM并发
转自:http://www.infoq.com/cn/articles/memory_barriers_jvm_concurrency内存屏障,又称内存栅栏,是一组处理器指令,用于实现对内存操作的顺序限制。本文介绍了内存屏障对多线程程序的影响。我们将研究内存屏障与JVM并发机制 的关系,如易变量(volatile)、同步(synchronized)和原子条件式(atomic conditi转载 2012-12-05 13:44:07 · 842 阅读 · 0 评论 -
Java并发编程详解之 线程安全和对象共享
一、简单介绍在我们用框架编程的过程中,经常不用太关注多线程问题,这是因为例如Servlet和RMI(Remote Method Invocation,远程方法调用),RMI使得代码能够调用其他JVM中的运行的对象。这些框架负责解决一些细节问题,例如请求管理、线程创建、负载均衡,并在正确的时刻将请求分发给正确的应用程序组件。编写Servlet的开发人员不需要了解有多少请求在同一时刻要被处理,也不原创 2012-12-05 16:07:12 · 8282 阅读 · 1 评论 -
线程池
只有当任务都是同类型的并且是相互独立时,线程池的性能才能达到最佳。如果将运行时间较长的与运行时间较短的任务混合在一起,那么除非线程池很大,否则将可能造成“阻塞”。如果提交的任务依赖于其他任务,那么除非线程池无限大,否则将可能造成“拥塞”。如果提交的任务依赖于其他任务,那么除非线程池无限大,否则将可能造成死锁。幸运的是,有基于网络的典型服务器应用程序中——网页服务器、邮件服务器以及文件服务器等,他们原创 2012-11-22 20:41:29 · 2004 阅读 · 0 评论 -
一个缓存的实现(多线程的应用)
因数分解,将最近的计算结果缓存起来1、该Servlet在没有足够原子性保证的情况下对其最近计算结果进行缓存(不要这样做)import java.math.BigInteger;import java.util.concurrent.atomic.*;import javax.servlet.*;import net.jcip.annotations.*;@NotThre原创 2012-12-06 19:14:27 · 3997 阅读 · 0 评论 -
JDK 7 中的 Fork/Join 模式
简介: 随着多核时代的来临,软件开发人员不得不开始关注并行编程领域。而 JDK 7 中将会加入的 Fork/Join 模式是处理并行编程的一个经典的方法。虽然不能解决所有的问题,但是在它的适用范围之内,能够轻松的利用多个 CPU 提供的计算资源来协作完成一个复杂的计算任务。通过利用 Fork/Join 模式,我们能够更加顺畅的过渡到多核的时代。本文将介绍使用 JDK 7 中 Fork/Join转载 2012-11-20 18:48:29 · 692 阅读 · 0 评论 -
sleep()和wait()的区别
1、sleep()方法是来自Thread类,而wait()方法是来自Object类2、sleep方法没有释放锁,使得其他线程可以使用同步控制块或方法。而wait方法释放了拥有的锁3、wait,notify和notifyAll只能在同步控制方法获知同步控制块里面使用,而sleep可以在任何地方使用注意sleep(long millis)方法是需要指明休眠时间的,并且该方法是静态方法,也就原创 2012-11-20 17:48:20 · 841 阅读 · 0 评论 -
多线程之——CreateThread与_beginthreadex区别
C/C++创建多线程可以有CreateThread与_beginthreadex,他们到底有什么区别//最简单的创建多线程实例#include #include //子线程函数DWORD WINAPI ThreadFun(LPVOID pM){ printf("子线程的线程ID号为:%d\n子线程输出Hello World\n", GetCurrentThreadId());转载 2012-09-28 20:55:13 · 635 阅读 · 0 评论 -
原子操作 Interlocked系列函数
下面是类似于统计一个网站每天有多少用户登录,每个用户登录用一个线程模拟,线程运行时会将一个表示计数的变量递增。程序在最后输出计数的值表示有今天多少个用户登录,如果这个值不等于我们启动的线程个数,那显然说明这个程序是有问题的。整个程序代码如下:#include #include volatile long g_nLoginCount; //登录次数unsigned int __stdcal转载 2012-09-28 21:23:32 · 842 阅读 · 0 评论 -
多线程之——实现循环打印"abc"
问题:有三个线程ID分别是A、B、C,请有多线编程实现,在屏幕上循环打印10次ABCABC…思路:可以使用同步多线程对打印字符的控制public class CirclePrintABC { public static void main(String args[]) { SingleInstance si = SingleInstance.newInstance(); Thre原创 2012-10-12 10:15:54 · 1451 阅读 · 0 评论 -
多线程-----经典解释监视器和对象锁
在JVM的规范中,有这么一些话: “在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的” “为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁” “锁住了一个对象,就是获得对象相关联的监视器” 从这些话,看出监视器和对象锁好像是一回事,那为何要定义两个东西,若不一样,他们的关系如何? 解释1: 监视器好转载 2012-11-18 15:05:03 · 6839 阅读 · 0 评论 -
中断线程
线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true)。它并不像stop方法那样会中断一个正在运行的线程。判断线程是否被中断判断某个线程是否已被发送过中断请求,请使用T转载 2012-11-18 19:45:53 · 899 阅读 · 0 评论 -
同步方法ReentrantLock和Synchronized
同步格言:如果你向一个变量写值,而这个变量接下来可能会被另一个线程所读取,或者你从一个变量读值,而它的值可能是前面由另一个线程写入的,此时你就必须使用同步从JDK5.0开始,有两种机制来保护代码块不受并行访问的干扰。旧版本的Java使用synchronized关键字来达到这个目的,而JDK5.0引进了ReentrantLock类。1、ReentrantLock显示锁基本用法:原创 2012-11-18 14:22:53 · 2938 阅读 · 1 评论 -
多线程-----重点内容记录解析
1、抢占式多任务和协作(非抢占)式多任务:使用抢占式调度的系统给每个可运行的线程一个时间片来处理任务。当这个时间片用完时,操作系统剥夺该线程对资源的占用,使其他线程有机会运行。在选择下一个线程时,操作系统会考虑到线程的优先级。所有现代的桌面和服务器操作系统都使用抢占式调度。但一些小型设备,例如手机,可能会采用协作式调度。在这样的设备中,一个线程只有在调用sleep或yield这样的方法时才原创 2012-11-18 18:41:24 · 1108 阅读 · 0 评论 -
ReentrantReadWriteLock类和ReentrantLock类的区别
java.util.concurrent.locks包定义了两个锁类,ReentrantLock和ReentrantReadWriteLock类。当有很多线程都从某个数据结构中读取数据而很少有线程对其进行修改时,后者就很有用了。在这种情况下,允许读取器线程共享访问是合适的。当然,写入器线程依然必须是互斥访问的下面是使用读/写锁的必要步骤:(1) 创建一个ReentrantReadWri原创 2012-11-19 22:27:58 · 9961 阅读 · 9 评论 -
取消与关闭
1、中断的引入在程序中可能需要取消操作,也就是任务取消,原因也很多,例如用户请求取消,有时间限制的操作,应用程序事件,错误,关闭等等。(1)通常,中断是实现取消的最合理的方式(2)Thread中的中断方法有以下:public void interrupt(){ }public boolean isInterrupt(){ } //public static boolean原创 2012-12-11 22:15:45 · 4234 阅读 · 1 评论