- 12
- 0
- 约1.03万字
- 约 30页
- 2017-04-02 发布于湖北
- 举报
Java 多线程
(时间:2次课,4学时)
第7章 多线程
7.1 线程概述
7.2 创建和启动线程
7.3 线程的状态及转换
7.4 线程的调度和优先级
7.5 线程的其它控制
7.6 多线程的同步
7.7 线程交互
生产者-消费者问题
7.8 使用Java Timer调度任务
7.1 进程和线程的概念
进程(Process):每个独立执行的程序称为进程。
多进程: 在操作系统中能同时运行多个任务(程序)
线程(Thread):程序内部的一条执行路径。
多线程: 在同一应用程序中多条执行路径同时执行
线程和进程的区别
每个进程都有独立的代码和数据空间(进程上下文),进程间的切换开销大
同一进程内的多个线程共享相同的代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小
7.2 线程的创建和启动
两种创建新线程的方式
第一种:将类声明为java.lang.Thread的子类并重写run()方法
class MyThread extends Thread{ public void run(){…} }
创建此线程类的实例并启动:
MyThread thread1 = new MyThread();
thread1.start();
第二种:定义实现java.lang.Runnable接口的类
Runnable接口中只有一个方法public void run();用来定义线程运行体:
class MyRun implements Runnable{ public void run(){…} }
创建Thread实例时将这个类的实例作为参数传递到线程实例内部。然后再启动:
Thread thread1 = new Thread(new MyRun());
thread1.start();
使用实现Runnable接口的方式创建线程时可以为相同程序代码的多个线程提供共享的数据。
7.2.2 线程的基本使用方法
public void start() //启动该线程
public static Thread currentThread() //返回对当前线程对象的引用
public ClassLoader getContextClassLoader()
返回该线程的上下文ClassLoader
public final boolean isAlive() //线程是否处于活动状态
public Thread.State getState() //返回该线程的状态
public final String getName() //返回该线程的名称
public final void setName(String?name) //改变线程名称
public final void setDaemon(boolean?on)
将该线程标记为守护线程或用户线程
示例
public class Thread1Test {
public static void main(String[] args) {
Runner runner = new Runner();
Thread thread1 = new Thread(runner);
thread1.start();
for(int i = 0; i 100; i++){
System.out.println(-------Main Thread: + i);
}
}
}
class Runner implements Runnable{
public void run() {
for(int i = 0; i 100; i++){
System.out.println(runner: + i);
}
}
}
示例2
public class Thread2Test {
public static void main(String[] args) {
MyThread thread1 = new MyThread();
thread1.start();
for(int i = 0; i 100; i++){
System.out.println(-------Main Thread: + i);
}
}
}
class MyThread extends Thread{
public void run() {
for(int i = 0; i 1
原创力文档

文档评论(0)