文章列表
接Java Code之线程与同步(一)的例子,使用synchronized来挂锁。实际上这个锁的效率并不高,分析一下,如果门外排队的都是读数据的人,那么这些人是可以同时进入屋子里的,他们不会影响数据的配对。也就是说可以多个读数据操作同时进行,写数据操作只能同时有一个,并且在写数据时,不能读数据。
Java中就有一个这样的挂锁机制,看代码:
如之前的例子,只需修改FileManager.java
package com.iteye.badpie.javacode.thread.sync;
import java.util.Random;
import java.util.conc ...
模拟一个实例,用一个线程负责写数据,一个线程负责读数据,清单如下:
FileManager.java 负责读和写的具体实现
Main.java 主类,入口
TaskThread.java 自定义线程类
TaskRead.java 读任务
TaskWrite.java 写任务
FileManager.java
package com.iteye.badpie.javacode.thread.sync;
import java.util.Random;
public class FileManager {
private Random mRandom;
...
Java提供了Thread类来创建线程,具体看代码
新建下载线程类
package com.iteye.badpie.javacode.thread;
import java.util.Random;
public class DownloadThread extends Thread {
private static final String TAG = DownloadThread.class.getSimpleName();
private String mMovie;
private Random mRandom;
p ...
一台电脑上,开一个迅雷在下载游戏,还挂着QQ和一个朋友聊天,这个迅雷和QQ是两个不相关的程序,他们之间没有相互影响,至少看起来是没有关联的。你关闭了迅雷,QQ不会退出。这里的迅雷和QQ是属于不同的进程。进程的运行和调度会消耗很多资源。你的电脑能同时开200个应用程序么?
迅雷里有10个电影在同时下载,他们之间也没有太大的影响,每个下载任务独自运行,不会因为其中一个资源下载失败导致另外的下载失败,取消了其中的一个下载任务,其它的下载任务也不会受到影响。这里的迅雷是一个进程,里面的这10个下载任务就是属于迅雷这个进程的10个线程。
下面来看看Java提供了什么方式来操作进程和线程。
每一 ...
先看看Looper,MessageQueue,Message,Handler之间的关系.
Looper的构造函数是private,因此不能直接new,Looper的prepare方法会先检查当前线程下是否存在Looper,如果不存在则为当前线程new一个Looper,如果发现当前线程下已经存在Looper实例,则会抛出异常。
相关源码如下:
static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();
public static void prep ...
package com.iteye.badpie.javacode.duotai;
/**
* 人民警察
*/
public interface IPolice {
/**
* 抓小偷
*/
public void catchThief();
}
package com.iteye.badpie.javacode.duotai;
/**
* 一个警察,执行抓小偷任务.
*/
public class PoliceReal implements IPolice {
@Override
...