ackageThreadDemo;/**
* 多线程
* 程序:一组指定的集合(没有运行的程序)
* 进程:正在执行的程序。负责获取CPU内存资源的
* 线程:进程中的一个组成部分,负责被CPU执行(CPU调度)
*
* 注:
* 一个进程至少有一个线程,线程是进程的组成部分,线程结束,进程不一定结束,
* 但是进程结束,线程就一定会结束。
*
* java中线程的实现方式:
* 继承Thread类:
* [1]继承Thread类
* [2]重写run()方法
* [3]创建对象,调用start方法。启动线程
*/publicclassMyThreadextendsThread{publicMyThread(String name){super(name); }@Overridepublicvoidrun() {for(inti =1;i<=5;i++){//获取当前线程及名称System.out.println(Thread.currentThread().getName()+"\t第"+i+"次执行...."); } }publicstaticvoidmain(String[] args) {//创建对象MyThread mt =newMyThread("小琪"); MyThread mt1 =newMyThread("phoebe"); MyThread mt2 =newMyThread("菲比"); MyThread mt3 =newMyThread("帅帅");//mt.run(); //对象名.方法名(); 这个代码写在了主方法里,由主线程来执行mt.start(); mt1.start(); mt2.start(); mt3.start(); }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
packageThreadDemo;/**
* Java中线程实现的第二种方式:
* 实现Runnable接口
* [1]实现Runnable接口
* [2]重写run方法
* [3]创建一个Thread对象
* [4]通过Thread对象,调用Thread类中的start()方法启动线程
*
* 开发中建议使用接口的方式来实现多线程,以避免Java中类的单继承带来的局限性
* Runnable这个接口还能共享资源
*/publicclassMyRunimplementsRunnable{@Overridepublicvoidrun() {for(inti =1;i<=5;i++){ System.out.println(Thread.currentThread().getName()+":\t第"+i+"次运行....."); } }publicstaticvoidmain(String[] args) {//创建对象MyRun mr =newMyRun(); Thread th =newThread(mr);//创建Thread类对象,使用Thread类中的start()方法启动线程th.start(); }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
packageThreadDemo01;/**
* 一共有5张票:(runable接口可以共享资源)
* 合理的售完
*/publicclassMyRunnableimplementsRunnable{intticket =5;@Overridepublicvoidrun() {for(inti =1;i<=15;i++){//有15个人等着买票if(ticket>0){ System.out.println("线程"+Thread.currentThread().getName()+"卖票"+(ticket--)); } } }publicstaticvoidmain(String[] args) {//创建对象MyRunnable mr =newMyRunnable(); Thread th =newThread(mr); Thread th1 =newThread(mr); Thread th2 =newThread(mr); th.start(); th1.start(); th2.start(); }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
packageThreadDemo02;/**
* 线程的五种状态:
* 新生:通过new创建时
* 就绪:通过调用start方法,具备执行资格,等待分配到CPU资源
* 运行:具备执行资格同时又刚好得到了CPU资源,执行run方法中的代码
* 直到等待某资源而阻塞或执行完任务而死亡
* 阻塞:正在执行时的线程,被执行了sleep(睡眠)方法等,停止了运行则是阻塞阶段
* 死亡(终止):线程生命周期的最后一个阶段:
* 1、正常执行完毕
* 2、线程被强制制止
* 3、线程抛出未捕获的异常
*/publicclassThreadDemo{publicstaticvoidmain(String[] args) {//创建对象 【新生】ThreadEntity te =newThreadEntity(); Thread t =newThread(te); System.out.println("线程启动前:"+t.isAlive());//falset.start();//【就绪状态】System.out.println("线程启动后:"+t.isAlive());//true//优先级System.out.println("获取当前线程及名字:"+Thread.currentThread().getName()); System.out.println("获取当前线程的优先级:"+Thread.currentThread().getPriority()); System.out.println("线程的最高优先级:"+Thread.MAX_PRIORITY); System.out.println("线程的最低优先级:"+Thread.MIN_PRIORITY); System.out.println("线程的默认优先级:"+Thread.NORM_PRIORITY);//设置优先级t.setPriority(3); System.out.println(t.getPriority()); }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
packageThreadDemo02;/**
*/publicclassThreadEntityimplementsRunnable{@Overridepublicvoidrun() {for(inti =1;i<=5;i++){ System.out.println(Thread.currentThread().getName()+":\t"+i); } }}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
网友评论