第11章 多线程(Java面向对象程序设计课件)
一个任务一般对应一个进程。
进程是一个程序在给定的数据集合上的一次执行过程,是系统进行资源分配和运行调度的独立单位。
线程是某一进程中一路单独运行的程序。也就是说,进程由假设干线程构成,线程存在于进程之中。
各线程共享相同的代码和全局数据,但各有其自己的堆栈。由于所有线程共享同样的代码和全局数据,它们比进程更紧密,比单独的进程间更趋向于相互作用,线程间的相互作用更容易些,因为它们本身就有某些供通信用的共享内存:进程的全局数据。
比方,我登陆一个QQ,操作系统中就要一个QQ进程在运行,QQ进程中又有多个线程〔好友消息线程、文件传递线程、QQ等级线程、QQ群线程〕。
前面写的程序大都是单线程程序,只有一条执行路径,即是从主方法第一句开始执行,依次执行每条语句直到主方法的最后一句,也就是说该Java应用程序的进程只有一个线程。
Java是多线程的操作语言,提供了线程处理机制。
在Java中可以有2种方式实现多线程操作,一是继承Thread类,另一种是实现Runnable接口。
Thread
,只要Thread的子类重写了run方法就可以实现多线程。run方法规定了该线程的具体使命。
Thread类start方法:启动线程,通过JVM自动调用Thread类的run方法。
例1:继承Thread类,定义多线程。
public class ThreadTest extends Thread {
private String name; // 定义name属性
public MyThread(String name) {
= name;
}
public void run() { // 重写
for (int i = 0; i < 10; i++) {
(name+i);
}
}
public static void main(String[] args) {
ThreadTest t1 = new ThreadTest("线程A") ;
ThreadTest t2 = new ThreadTest("线程B") ;
(); //启动线程A
() ; //启动线程B
for(int i=0;i<10;i++){
("主线程"+i);
}
}
}
由执行结果可以看出主线程、线程A和线程B交替执行,也就是三个线程同时向前推进执行。
Runnable
如果一个子类需要继承某个父类又要实现多线程,该怎么办?
因为Java是单继承,子类不能同时继承两个父类,但是可以实现多个接口。也就是说子类可以实现Runnable接口来实现多线程机制。
Runnable接口中只有一个方法void run()方法,子类只需实现run方法就可实现Runnable接口。
例2:测试实现Runnable的多线程程序。
public class RunnableTest implements Runnable{
private String name; //定义name属性
public RunnableTest(String name) {
= name;
}
public void run() { //重写
for (int i = 0; i < 100; i++)
(name+i);
}
public static void main(String[] args) {
RunnableTest run1=new RunnableTest("张三");
RunnableTest run2=new RunnableTest("李四");
new Thread(run1).start(); //启动“张三〞线程
new Thread(run2).start(); //启动“李四〞线程
for(int i=0;i<100;i++)
("主线程"+i);
}
}
多线程Java面向对象程序设计 来自淘豆网m.daumloan.com转载请标明出处.