一. 基础知识
要了解多线程首先要知道一些必要的概念,如进程,线程等等。开发多线程的程序有利于充分的利用系统资源(CPU资源),使你的程序执行的更快,响应更及时。
1. 进程,一般是指程序或者任务的执行过程(是动态执行的)。
2. 线程,一个线程包含多个线程(例如你打开一个word文档这就是一个进程。word里面的写入,拼写检查等等就是一个一个的线程)。
3. 进程包含线程,线程共享进程的资源(内存)
4. 线程的交互,线程在工作时往往需要正确的通信才能完成任务。
5. 互斥,如某线程抢占了CPU资源,其它的线程都要进入等待状体。
6. 同步,就是指共同,协同,互相配合的完成某一项任务。
二. Java多线程
线程的创建有两种方法,一种是继承Thread类,另一种是实现Runnable接口
1. Thread类常用的方法
<1>. 构造方法
Thread()
Thread(String name)
Thread(Runnable target)
Thread(Runnable target, String name)
<2>. 常用Thread类方法
启动线程 void start
线程随眠 static void sleep(long millis)
使其它线程等待当前线程终止 void join() ; void join(long millis) ; void join(long millis, int nanos)
使当前运行的线程施放处理器资源 static void yield
获取当前运行的线程引用 static Thread currentThread
2. 两种线程实现方法事例代码
package com.bochao.thread; class Actress implements Runnable{ @Override
public void run() { int count = 0;
boolean keepRunning = true;
System.out.println(Thread.currentThread().getName() + "开始....");
while(keepRunning){
System.out.println(Thread.currentThread().getName() + "计数:" + (++count));
if(count == 100){
keepRunning = false;
}
if(count % 10 == 0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(Thread.currentThread().getName() + "结束!");
}
} public class ConcurrentDemo extends Thread { @Override
public void run() { int count = 0;
boolean keepRunning = true;
System.out.println(getName() + "开始");
while(keepRunning){
System.out.println(getName() + "计数:" + (++count));
if(count == 100){
keepRunning = false;
}
if(count % 10 == 0){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(getName() + "结束!");
} public static void main(String[] args) { Thread actor = new ConcurrentDemo();
actor.setName("张三");
actor.start(); Thread actress = new Thread(new Actress(), "李四");
actress.start();
} }
3. 网上找了学习多线程的需要了解的知识体系,学习路线如下:
1. Java Memory Mode
2. Locks 和 Condition 类对象
3. 线程安全性
4. 多线程常用交互模型(Producer-Consumer模型, Read-Write Lock模型,Future模型,Worker Thread模型)
5. Java5中并发编程工具(java.util.concurrent,线程池ExcutorService,Callable和Futrue,BlockingQueue)
6. 推荐两本书:Java核心技术(多线程篇), Java concurrency IN Practice