2022年马士兵_JAVA视频教程_JSE_._第章_线程[参 .pdf
《2022年马士兵_JAVA视频教程_JSE_._第章_线程[参 .pdf》由会员分享,可在线阅读,更多相关《2022年马士兵_JAVA视频教程_JSE_._第章_线程[参 .pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章线程9.1 线程的基本概念1、线程是一个程序内部的顺序控制流(线程是一个程序中不同的执行路径) 。2、线程和进程的区别a)每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销。b)线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。c)多进程:在操作系统中能同时运行多个任务(程序)。d)多线程:在同一应用程序中能有多个顺序同时执行。3、Java的线程是通过 jva.lang.Thread类来实现的。4、VM 启动时会有一个由主方法(public static void main() 所定义的线程。5、可以通过创建
2、Thread的实例来创建线程。6、每个线程都是通过某个特定的Thread 对象所对应的方法run()来完成其操作的,方法 run()称为线程体。7、通过调用 Thread类的 start()方法来启动一个线程。8、线程类的写法class Runner1 implements Runnable /建议实用 Runnable接口/class Runner1 extends Thread / 不建议使用继承!public void run() for(int i = 0; i100; i+) System.out.println(Runner1 : + i); 9、线程的调用可以用run方法启动,但
3、这样就是方法的调用,而不是多线程!真正的是调用 Thread的 start()方法!public class TestThread1 public static void main (String args) Runner1 r = new Runner1(); /r.run();/这样就是方法的调用的,并不是真正的多线程Thread t = new Thread(r); t.start(); for(int i = 0; i100; i+) System.out.println(Main Thread :- + i); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - -
4、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 10、线程的创建和启动第一种:1)定义现场类实现Runnable 接口2)Thread myThread = new Thread(target);/target为 Runnable 接口类型3)Runnable 中只有一个方法:public void run(); 用以定义线程的运行体4)使用 Runnable 接口可以为多个线程提供数据的共享5)在实现Runnable 接口的类的run 方法定义中可以使用Thread 的静态方法public st
5、atic Thread currentThread() 读取当前线程的引用第二种:1)可以顶一个Thread 的之类并重写其run 方法如:Class MyThread extends Thread public void run(). 2)然后生成该类的对象MyThread myThread = new MyThread(.) 本课代码TestThread1.java public class TestThread1 public static void main (String args) Runner1 r = new Runner1(); /r.run(); Thread t = ne
6、w Thread(r); t.start(); for(int i = 0; i100; i+) /Thread.sleep(1); System.out.println(Main Thread :- + i); /class Runner1 implements Runnable class Runner1 extends Thread public void run() /重写的方法不能抛出比被重写方法不同的异常for(int i = 0; i100; i+) /Thread.sleep(1); System.out.println(Runner1 : + i); 名师资料总结 - - -
7、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - 9.2 Sleep方法1、线程的状态2、线程控制基本方法4、sleep/join/yield 方法名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - sleep: 1)可以调用Thread 的静态方法public static void s
8、leep(long millis) throws InterruptedException 使得当前线程休眠(暂时停止执行millis 毫秒)2)由于是静态方法,sleep可以由类名直接调用Thread.sleep(.); TestInterrupt.java join 方法1)合并某个线程yield 方法让出 CPU,给其他线程执行的机会本课代码TestInterrupt.java import java.util.*; public class TestInterrupt public static void main(String args) MyThread thread = new
9、MyThread(); thread.start(); try Thread.sleep(10000); catch (InterruptedException e) thread.interrupt(); class MyThread extends Thread public void run() while(true) System.out.println(= +new Date() + =);/Date类在 java.tuil 包中try sleep(1000); catch(InterruptedException e) System.out.println(MyThread is
10、rupted!); return ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - - - - 9.3 Join Yield Priority 1、Join TestJoin.java public class TestJoin public static void main (String args) MyThread2 t1 = new MyThread2(syxThread); t1.start(); try t1.join();
11、 catch(InterruptedException e) for(int i=1; i=10; i+) System.out.println(MainThread is Running!); class MyThread2 extends Thread MyThread2(String s) super(s); public void run() for(int i=1; i=10; i+) System.out.println(MyThread run! + getName() ); try sleep(1000); catch(InterruptedException e) retur
12、n ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - 2、Yiled TestYiled.java public class TestYield public static void main(String args) MyThread3 t1 = new MyThread3(t1); MyThread3 t2 = new MyThread3(t2); t1.start(); t2.start(); class MyThre
13、ad3 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(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - 3、Priority TsetPriority.javapublic clas
14、s 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; i100; i+) System.out.println(T1: + i); 名师资料总结 - - -精品资料欢
15、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - class T2 implements Runnable public void run() for(int i=0; i100; i+) System.out.println(T2: + i); 9.5 线程同步 _1 TestSync.java public class TestSync implements Runnable Timer timer = new Timer(); public static
16、void main(String args) TestSync test = new TestSync(); Thread t1 = new Thread(test); Thread t2 = new Thread(test); t1.setName(t1); t2.setName(t2); t1.start(); t2.start(); public void run() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - ti
17、mer.add(Thread.currentThread().getName(); class Timer private static int num = 0; public void add(String name) num +; try Thread.sleep(1); catch(InterruptedException e) System.out.println(name + , 你是第 + num + 个使用 timer 的线程 ); 9.6 线程同步 _2 线程同步1、在 java 语言中,引入了对象互斥锁的概念,保证共享数据操作的完整性,每个对象都对应于一个可称为“互斥锁”的标
18、记,这个标记保证在任一时刻的互斥锁联系。当某个对象synchronized 修饰时,表明该对象在任一时刻只能由一个线程访问。2、关键字synchronized 来与对象的互斥锁联系。当某个对象synchronized 修饰时,表明该对象在任一时刻只能由一个线程访问。synchronized 的使用方法synchronized(this) / 锁定当前对象num +; try Thread.sleep(1); catch(InterruptedException e) System.out.println(name + , 你是第 + num + 个使用 timer 的线程 ); Synchro
19、nized 还可以放在方法声明中,表示整个方法为同步方法,例如public synchronized void add(String name) /执行这个方法当前对象被锁定TestSync.java public class TestSync implements Runnable Timer timer = new Timer(); public static void main(String args) TestSync test = new TestSync(); Thread t1 = new Thread(test); 名师资料总结 - - -精品资料欢迎下载 - - - - -
20、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 18 页 - - - - - - - - - Thread t2 = new Thread(test); t1.setName(t1); t2.setName(t2); t1.start(); t2.start(); public void run() timer.add(Thread.currentThread().getName(); class Timer private static int num = 0; public synchronized void add(Strin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年马士兵_JAVA视频教程_JSE_._第章_线程参 2022 士兵 _JAVA 视频教程 _JSE_ 线程
限制150内