第七章 线程与对象群体的组织
JAVA语言程序设计
1
目录
多线程编程根底
线程的生命周期
线程的优先级
对象数组
集合〔Collection, Map〕
本章小结
2
多线程编程根底
本节内容
线程的概念
Thread类
Runnable接口
线程间的数据共享
多线程的同步控制
线程之间的通信
后台线程
3
线程的概念
进程和线程的区别
进程
一个独立程序的每一次运行称为一个进程,例如
用字处理软件编辑文稿时,同时翻开mp3播放程序听音乐,这两个独立的程序在同时运行,称为两个进程
设置一个进程要占用相当一局部处理器时间和内存资源
大多数操作系统不允许进程访问其他进程的内存空间,进程间的通信很不方便,编程模型比较复杂
多线程编程根底
4
线程
一个程序中多段代码同时并发执行,称为多线程
通过多线程,一个进程外表上看同时可以执行一个以上的任务——并发
创立线程比创立进程开销要小得多,线程之间的协作和数据交换也比较容易
Java是第一个支持内置线程操作的主流编程语言
多数程序设计语言支持多线程要借助于操作系统“原语(primitives)〞
线程的概念(续)
多线程编程根底
5
Thread类
Thread类
在Java程序中创立多线程的方法之一是继承Thread类
封装了Java程序中一个线程对象需要拥有的属性和方法
从Thread类派生一个子类,并创立这个子类的对象,就可以产生一个新的线程。这个子类应该重写Thread类的run方法,在run方法中写入需要在新线程中执行的语句段。这个子类的对象需要调用start方法来启动,新线程将自动进入run方法。原线程将同时继续往下执行
Thread类直接继承了Object类,并实现了Runnable接口。它位于包中,因而程序开头不用import任何包就可直接使用
多线程编程根底
6
Thread类(续) ——例7_1
在新线程中完成计算某个整数的阶乘
public class Ex7_1 {
public static void main( String [] args ) {
("main thread starts");
FactorialThread thread=new FactorialThread(10);
();
("main thread ends " );
}
}
class FactorialThread extends Thread {
private int num;
public FactorialThread( int num ) {
=num;
}
多线程编程根底
7
public void run() {
int i=num;
int result=1;
("new thread started" );
while(i>0) {
result=result*i;
i=i-1;
}
("The factorial of "+num+" is "+result);
("new thread ends");
}
}
运行结果
main thread starts
main thread ends
new thread started
The factorial of 10 is 3628800
new thread ends
Thread类(续) ——例7_1运行结果
多线程编程根底
8
结果说明
main线程已经执行完后,新线程才执行完
main函数调用()方法启动新线程后并不等待其run方法返回就继续运行,函数在一边单独运行,不影响原来的main函数的运行
源程序修改
如果启动新线程后希望主线程多持续一会再结束,可在start语句后加上让当前线程〔这里当然是main〕休息1毫秒的语句:
try { (1); } catch(Exception e){};
Thread类(续) ——例7_1修改
多线程编程根底
9
修改后运行结果
main
java第7章 ppt课件 来自淘豆网m.daumloan.com转载请标明出处.