马士兵-J2SE第九章-线程-个人学习笔记(共13页).doc
《马士兵-J2SE第九章-线程-个人学习笔记(共13页).doc》由会员分享,可在线阅读,更多相关《马士兵-J2SE第九章-线程-个人学习笔记(共13页).doc(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上第九章 Java多线程机制线程基本概念 Runnable线程类接口线程创建和启动线程的调度好优先级线程的状态控制 sleep join yield 线程同步synchronized wait notify/notifyAll一、 线程基本概 :1进程:一个独立程序的每一次运行称为一个进程。执行进程是指进程里面主线程mian方法开始执行了(静态概念)。机器上运行的都是线程2线程是一个程序不同的执行路径 是一个程序内部的顺序控制流)main方法:一个主线程,主分支3一个时间点上一个CPU只能有一个线程执行进程与线程区别每个进程都有独立的代码和数据空间,进程间的切换会有很大
2、开销。线程可以看成轻量级的进程 同一类线程共享代码和数据空间,每个线程有独立的运行栈个程序计数器,线程切换开销小。多线程:在操作系统中能同时运行多个任务(程序)。多线程:在同一个应用程序中有多个顺序流同时执行。二、 线程的创建和启动1实现Runnable接口(常用)设计一个实现Runable接口的类,根据需要重写run方法;建立该类的对象,以此对象为参数建立Thread类的对象;调用Thread类对象start方法启动线程,将执行权转交到run方法。2继承Thread类 定义一个从Thread类继承的子类并重写其run方法然后生成该类的对象,调用Thread类对象start方法启动线程说明:R
3、unnable接口 java.lang.Runnable Java多线程机制的一个重要部分,实际上它只有一个run()方法 Thread类实现了Runnable接口,相对于Thread类,它更适合于多个线程处理同一资源 实现Runnable接口的类的对象可以用来创建线程,这时start方法启动此线程就会在此线程上运行run()方法 在编写复杂程序时相关的类可能已经继承了某个基类,而Java不支持多继承,在这种情况下,便需要通过实现Runnable接口来生成多线程Thread类 java.lang.Thread 在Java程序中创建多线程的方法之一是继承Thread类 封装了Java程序中一个线
4、程对象需要拥有的属性和方法 从Thread类派生一个子类,并创建这个子类的对象,就可以产生一个新的线程。这个子类应该重写Thread类的run方法,在run方法中写入需要在新线程中执行的语句段。这个子类的对象需要调用start方法来启动,新线程将自动进入run方法。原线程将同时继续往下执行 Thread类直接继承了Object类,并实现了Runnable接口。它位于java.lang包中,因而程序开头不用import任何包就可直接使用例子:ThreadTestThread1.java 开始使用Eclipse1实现Runnable接口(多线程程序交替执行.多态(接口,常用))package Th
5、read;public class TestThread1 public static void main(String args) Runner r = new Runner();Thread t = new Thread(r);/主线程;t.start();/启动分支线程for(int i=0; i100; i+) System.out.println(Main Thread:- + i);class Runner implements Runnable public void run() /线程运行体;for(int i=0; i100; i+) System.out.println(R
6、unner1 : + i);2 一般程序先执行子线程,再执行主线程(方法调用)package Thread;public class TestThread1_1 public static void main(String args) Runner1 r = new Runner1();r.run();for(int i=0; i100; i+) System.out.println(Main Thread:- + i);class Runner1 implements Runnable public void run() for(int i=0; i100; i+) System.out.p
7、rintln(Runner1 : + i);3继承Thread类(继承,不常用)package Thread;public class TestThread1_2public static void main(String arg)Runner1_2 r = new Runner1_2();r.start();for (int i = 0 ;i = 100; i+)System.out.println(Main Thread:!+i);class Runner1_2 extends Threadpublic void run()for (int i = 0 ;i = 100; i+)Syste
8、m.out.println(Runner2:!+i);2010-4-2 21:04:16 2010-4-14 16:28:59三、 线程状态转换四、 线程控制基本方法Sleep/Join/Yield方法 Sleep/Join(需要捕获异常)例子1 Thread/TestInterrupt.Java (线程结束的方式)package Thread;import java.util.*;public class TestInterrupt public static void main(String arg)MyThread thread = new MyThread();thread.start
9、();tryThread.sleep(10000);/主线程睡眠catch(InterruptedException e)thread.interrupt();/中断线程。class MyThread extends Threadboolean flag = true;public void run()/重写的方法不能抛出不必被重写方法不同的方法,此处不能写throws InterruptedExceptionwhile(flag)System.out.println(-+ new Date()+-);trysleep(1000);catch(InterruptedException e)/捕
10、获抛出的异常return;/停止例子2 Thread/ TestJoin.Java (线程合并方式)package Thread;public class TestJoin public static void main(String args) MyThread2 t1 = new MyThread2(abcde); t1.start();/启动分支线程 try t1.join();/把T1分支线程合并到当前线程 catch (InterruptedException e) for(int i=1;i=10;i+) System.out.println(i am main thread);
11、class MyThread2 extends Thread MyThread2(String s) super(s); public void run() for(int i =1;i=10;i+) System.out.println(i am +getName(); try sleep(1000); catch (InterruptedException e) return; 例子3 Thread/ TestYield.Java (让出Cup)package Thread;public class TestYield public static void main(String args
12、) MyThread3 t1 = new MyThread3(t1); MyThread3 t2 = new MyThread3(t2); t1.start(); t2.start(); class MyThread3 extends Thread MyThread3(String s)super(s); public void run() for(int i =1;i=100;i+) System.out.println(getName()+: +i); if(i%10=0) yield(); 五、 线程优先级 Priority例子 Thread/ TestPriority.Javapack
13、age Thread;public class TestPriority public static void main(String args) Thread t1 = new Thread(new T1();Thread t2 = new Thread(new T2();t1.setPriority(Thread.NORM_PRIORITY + 3);/提高优先级t1.start();t2.start();class T1 implements Runnable public void run() for(int i=0; i1000; i+) System.out.println(T1:
14、 + i);class T2 implements Runnable public void run() for(int i=0; i1000; i+) System.out.println(-T2: + i);2010年4月14日21:40:41 2010-4-15 16:23:44六、 例子 TestThread2-6TestThread2一个线程类可以启动两个线程package Thread;public class TestThread2 /一个线程类可以启动两个线程public static void main(String args) Runner2 r = new Runner2
15、();Thread t1 = new Thread(r);Thread t2 = new Thread(r);t1.start();t2.start();class Runner2 implements Runnable public void run() for(int i=0; i30; i+) System.out.println(No. + i);正常停止线程TestThread4package Thread;public class TestThread4 /怎么正常停止线程public static void main(String args)Runner4 r = new Run
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 士兵 J2SE 第九 线程 个人 学习 笔记 13
限制150内