java基础高级课件中级3java线程上_第1页
java基础高级课件中级3java线程上_第2页
java基础高级课件中级3java线程上_第3页
java基础高级课件中级3java线程上_第4页
java基础高级课件中级3java线程上_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java线程(上)ID:SCSJ002-J2SEJava线程(上)线程概述Java线程模型创建线程后台线程(守护线程)线程的join()方法2线程概述多进程:在操作系统中能(同时)运行多个任务(程序)多线程:在同一应用程序中有多个顺序流(同时)执行3Java线程模型虚拟的CPU,由java.lang.Thread类封装和虚拟CPU来实现。CPU所执行的代码,传递给Thread类对象。CPU所处理的数据,传递给Thread类对象。代 码数 据虚拟CPUThreadJava线程模型4创建线程通过java.lang.Thread来创建一个线程Thread的构造器:Thread() Thread(Ru

2、nnable target) Thread(Runnable target, String name) Thread(String name) Thread(ThreadGroup group, Runnable target) Thread(ThreadGroup group, Runnable target, String name) Thread(ThreadGroup group, String name) 5启动线程每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。使用start()方法,线程进入Runnable(可运行)状态

3、,它将向线程调度器注册这个线程。调用start()方法并不一定马上会执行这个线程,正如上面所说,它只是进入Runnable 而不是Running。注意,不要直接在程序中调用线程的run()方法。6创建并启动线程例子public class TestThread extends Threadpublic void run()for(int i = 0; i 100; i+) System.out.println(Count:+i); public static void main(String args)TestThread tt = new TestThread();/注意,不要直接调用run

4、方法tt.start();7创建线程的另一种方式通过实现Runnable接口并实现接口中定义的唯一方法run(),可以创建一个线程public class TestThread implements Runnable public void run() for(int i = 0; i 100; i+) System.out.println(Count:+i); public static void main(String args) TestThread tt = new TestThread(); Thread t = new Thread(tt); t.start();8两种线程创建方式

5、的比较使用Runnable接口可以将CPU,代码和数据分开,形成清晰的模型;还可以从其他类继承;保持程序风格的一致性。直接继承Thread类不能再从其他类继承;编写简单,可以直接操纵线程,无需使用Thread.currentThread()。9结束线程线程会以以下三种方式之一结束:线程到达其 run() 方法的末尾;线程抛出一个未捕获到的 Exception 或 Error;/下面线程何时结束?public class TestThread implements Runnable public void run() for(int i = 0; i 100; i+) System.out.pr

6、intln(Count:+i); 10后台线程有一种线程,它是在后台运行的,它的任务是为其他的线程提供服务,这种线程被称为后台线程(Daemon Thread),又称为守护线程public static void main(String args) TestThread tt = new TestThread(); Thread t = new Thread(tt); /设置为后台线程,主线程结束,后台线程自动结束。 t.setDaemon(true); t.start();11线程的join方法Thread API 包含了等待另一个线程完成的方法:join() 方法。当调用 Thread.j

7、oin() 时,调用线程将阻塞,直到被join方法加入的目标线程完成为止。 Thread.join() 通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作。12join方法例子public class Key2File extends Thread String path; public Key2File(String path) this.path = path public void run() for(int i = 0; i 100; i+) Thread.sleep(1000); /休息1000毫秒 St

8、ring name = String.format(“%s/%d.txt”, path, i); OutputStream out = new FileOutputStream(name); out.write(“hello”.getBytes(); out.close(); public static void main(String args) try Key2File k = new Key2File10; for(int i = 1; i = 10; i+) ki-1 = new Key2File(d:tempd“ + i + ); ki-1.start(); for(int i =

9、1; i = 10; i+) ki-1.join(); catch (InterruptedException e) e.printStackTrace(); System.out.println(文件创建完成。);13线程的简单控制测试线程是否正处于Runnable状态isAlive()中断线程Thread.sleep()Thread.yield()设置线程的优先级getPriority()setPriority()14线程状态RunnableRunningBlockedNewstart()run() 运行完毕线程调度阻塞事件解除阻塞Dead15与线程控制有关的方法方法说明start() 新

10、建的线程进入Runnable状态run() 线程进入Running 状态 wait()线程进入等待状态,等待被notify,这是一个对象方法,而不是线程方法notify()/notifyAll()唤醒其他的线程,这是一个对象方法,而不是线程方法 yield()线程放弃执行,使其他优先级不低于此线程的线程有机会运行,它是一个静态方法getPriority()/setPriority()获得/设置线程优先级sleep()线程睡眠指定的一段时间join()调用这个方法的主线程,会等待加入的子线程完成16作业:主线程接受键盘输入,子线程每1秒钟一次,判断指定的某个目录下的某个文件是否被修改,如果被修改,就在Console上打印出“File changed”将一个500M的文件,用4个线程搬运到另外一个文件目录里去。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论