java
文章平均质量分 60
sunhuaer
这个作者很懒,什么都没留下…
展开
-
Java并行开发笔记1
加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。 当前仅当满足一下所有条件时,才应该使用volatile变量:对变量的写入操作不依赖变量的当前值,或者你能确保只有单个线程更新变量的值。该变量不会与其他状态变量一起纳入不变性条件中。在访问变量时不需要加锁。线程封闭:当访问共享的可变数据时,通常需要使用同步。一种避免使用同步的方式就是...原创 2014-03-01 16:10:00 · 114 阅读 · 0 评论 -
Java并行开发笔记6.2
shutdownNow的局限性 shutdownNow是强行关闭ExecutorService的,它会尝试取消正在执行的任务,并返回所以已提交但尚未开始的任务,但是我们无法通过常规方法来找出哪些任务已经开始但尚未结束。这意味着我们无法在关闭过程中知道正在执行的任务的状态,除非任务本身会执行某种检查。为此,设计了一个TrackingExecutor类跟踪在关闭之后被取消的任务,getCan...原创 2014-03-09 11:39:01 · 85 阅读 · 0 评论 -
Java并行开发笔记6
对于持有线程的服务,只要服务的存在时间大于创建线程的方法的存在时间,那么就应该提供生命周期方法。 在下面的程序中给出了一个简单的日志服务示例,其中日志操作在单独的日志线程中执行。产生日志消息的线程并不会将消息直接写入输出流,而是由LogWriter通过BlockingQueue将消息提交给日志线程,并由日志线程写入。这是一种多生产者单消费者(Multiple-Producer,S...原创 2014-03-09 09:38:22 · 111 阅读 · 0 评论 -
Java并行开发笔记5
不可中断的阻塞:Java.io 包中的同步 Socket/IO。 在服务器应用程序中,最常见的阻塞I/O形式就是对套接字进行读取和写入。虽然InputStream和OutputStream中的read和write等方法都不会响应中断,但通过关闭底层的套接字,可以使得由于执行read或write等方法而被阻塞的线程抛出一个SocketException。Java.io包中的同步I/O。...原创 2014-03-08 16:04:12 · 94 阅读 · 0 评论 -
Java并行开发笔记4
不可靠的取消操作将把生产者置于阻塞的操作中 class BrokenPrimeProducer extends Thread{ private final BlockingQueue<BigInteger> queue; private volatile boolean cancelled = false; BrokenPrimeProducer...原创 2014-03-07 22:17:24 · 114 阅读 · 0 评论 -
Java并行开发笔记3.2
关于页面渲染的不同操作解析:问题:一般地,对HTML文档进行处理时,当遇到文本标签时,将其绘制到图像缓存中。当遇到图像引用时,先通过网络获取它,然后再将其绘制到图像缓存中。 1. 串行地渲染页面元素,即普通的网页页面中图片和文本同时加载public class SingleThreadRenderer{ void renderPage(CharSequ...原创 2014-03-06 11:40:30 · 77 阅读 · 0 评论 -
Java并行开发笔记3.1
Runnable和Callable描述的都是抽象的计算任务。这些任务通常是有范围的,即都有一个明确的起始点,并且最终会结束。Executor执行的任务有4个生命周期阶段:创建、提交、开始和完成。由于有些任务可能要执行很长的时间,因此通常希望能够取消这些任务。在Executor框架中,已提交但尚未开始的任务可以取消,但对于那些已经开始执行的任务,只有当它们能响应中断时,才能取消。取...原创 2014-03-06 10:20:25 · 79 阅读 · 0 评论 -
排序之快速排序
现在在研究一个算法问题,需要用到快速排序,突然之间不会写了,真是尴尬,现在将经典的算法之一:快速排序算法代码整理出来,以便日后学习中快速翻阅到。public static void Sort(int[] arrs,int left,int right){ if(left<right){ int temp = quickSort(arrs, left, right)...原创 2014-03-05 21:21:32 · 70 阅读 · 0 评论 -
Java并行开发笔记2
可变的Point类@NotThreadSafepublic class MutablePoint{ public int x,y; public MutablePoint(){x=0;y=0;} public MutablePoint(MutablePoint p){ this.x=p.x; this.y=p.y; }...原创 2014-03-03 15:17:22 · 93 阅读 · 0 评论 -
Java并行开发笔记7
设置线程池大小 要想正确地设置线程池的大小,必须分析计算环境、资源预算和任务的特性。在部署的系统中有多少个CPU?多大的内存?任务是计算密集型、I/O密集型还是二者皆可?它们是否需要像JDBC连接这样的稀缺资源?如果需要执行不同类别的任务,并且它们之间的行为相差很大,那么应该考虑使用多个线程池,从而使每个线程池可以根据各自的工作负载来调整。 对于计算密集型的任务,在拥...原创 2014-03-10 21:00:13 · 85 阅读 · 0 评论