预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共13页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Java多线程 进程与线程 单进程与多进程 从计算机操作系统的发展来看,经历了这样的两个阶段 单进程处理:传统DOS系统是一个单进程的系统,所谓单进程就是在系统运行的一个时间段只能有一个程序在运行。所以在DOS系统中不容易感染病毒,因为如果有病毒出现,则立刻就会有反映。 多进程处理:windows系统就是一个多进程系统。所谓多进程就是在系统运行的一个时间段可以有多个应用程序同时运行,所以在windows系统中不容易发现病毒。 对于资源来说,所有的IO设备,CPU只有一个,那么对于多进程处理来说,在同一个时间段上会有多个程序同时运行,但是在同一个时间点上只能有一个程序运行。 线程 线程是在进程的基础上做的进一步划分。举个例子:我们做word编辑,word中的拼写检查是在word整个程序运行中运行的。 如果进程消失了,则线程也消失了,而如果线程消失了,则进程还依然会执行,不一定消失。 Java本身就属于多线程的操作系统,所以提供了多线程的处理机制 线程实现的两种方式 在java中可以有两种方式实现多线程操作,一种是继承Thread类,一种是实现Runnable接口。 Thread类 Thread类是在java.lang包中定义的。 一个类只要继承了Thread类,同时覆盖了本类中的run()方法,就可以实现多线程的操作了。 例子: classMyThreadextendsThread{ privateStringname; publicMyThread(Stringname){ this.name=name; } publicvoidrun(){//覆写run方法 for(inti=0;i<50;i++){ System.out.println("Thread:"+name+",i="+i); } } } publicclassThreadDemo1{ publicstaticvoidmain(String[]args){ MyThreadmt1=newMyThread("线程A"); MyThreadmt2=newMyThread("线程B"); mt1.run(); mt2.run(); } } 此时执行,可以发现结果非常有规律的,总是先执行完第一个对象在执行第二个对象,也就是说并没有实现交互式的运行。 从JDK文档我们可以发现,一旦调用start()方法后,会通过JVM虚拟机找到run()方法,可以实现交互式运行。 下面我们使用start()方法来启动线程。 publicvoidstart() classMyThreadextendsThread{ privateStringname; publicMyThread(Stringname){ this.name=name; } publicvoidrun(){//覆写run方法 for(inti=0;i<50;i++){ System.out.println("Thread:"+name+",i="+i); } } } publicclassThreadDemo1{ publicstaticvoidmain(String[]args){ MyThreadmt1=newMyThread("线程A"); MyThreadmt2=newMyThread("线程B"); mt1.start(); mt2.start(); } } 此时,程序已经可以正常的进行交互式运行了。 但是,需要考虑的是,为什么非要使用start()方法启动多线程呢? 使用start()方法可由底层操作系统来调用run()方法抢占cpu资源 此种方法实现线程有一个最大的限制,就是一个类只能继承一个父类,如果即希望实现线程又希望实现其他的类,则可以使用第二种方法。 Runnable接口在实际开发中一个多线程的操作类很少去使用Thread类来完成,而是通过Runnable接口完成的。 Runnable接口的定义如下: PublicinterfaceRunnbale{ publicvoidrun() } 所以一个类只要实现了此接口并且实现了run()方法,就可以实现多线程。 classMyThreadimplementsRunnable{ privateStringname; publicMyThread(Stringname){ this.name=name; } publicvoidrun(){ for(inti=0;i<50;i++){ System.out.println("Thread:"+name+",i="+i); } } } publicclassRunnableDemo1{