---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
线程实现的两种方法:
1、继承Thread。
2、实现Runnable接口,同时覆run()方法。
继承Thread实例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class MyThread extends Thread
{ private String
name; public MyThread(String
name) { this .name
= name; } public void run() { for ( int i= 0 ;i< 10 ;i++) System.out.println( this .name+ "---线程启动" +i); } } public class MyThreadDemo
{ public static void main(String
args[]) { MyThread
mt = new MyThread( "自定义线程" ); mt.start(); } } |
实现Runnable接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class MyThread1 implements Runnable { public void run()
{ for ( int i= 0 ;i< 10 ;i++)
{ System.out.println( "--线程启动--" +i); } } } public class MyThreadDemo1
{ public static void main(String
args[]) { MyThread1 mt
= new MyThread1(); Thread
t = new Thread(mt); t.start(); } } |
★在这里为什么要使用start()方法启动线程呢?
通过查阅可以看到Runnable接口如下:
1
2
3
4
5
|
interface Runnable { public void run(); } ..........
Thread implements Runnable
{ //其他方法
publicc void run(){} public native void start(); } |
Runable子类中并没有start()方法,而只有Thread类中才有,如果直接调用run()方法,
程序将会运行完run()方法体中的语句再运行后面的语句,根本达不到多线程的目的;
调用没有方法体的start()方法,native关键字声明的方法没有方法体,使用此关键字表示可调
用操作系统的底层函数(那么这样的技术又称为JNI技术),而且此方法在执行时将调用run()
方法(由系统默认调用)。
★在使用Runnable子类中并没有start()方法,而只有Thread类中才有,在Thread类中存在
以下构造方法:
public Thread(Runnable target)
此构造方法接收Runnabled 子类实例。
★两种实例的区别(实现Runnable的好处)
1、避免单继承。
2、实现资源共享。(以卖票为例)
Thread在卖张票三个线程同时卖票共卖了15张票(资源不共享)如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
class Ticket extends Thread
{ private int tick
= 5 ; public void run(){ while ( true )
{ if (tick> 0 ) System.out.println( "--卖票--" +tick--); } } } public class TicketDemo
{ public static void main(String
args[]) { Ticket
t1 = new Ticket(); Ticket
t2 = new Ticket(); t1.start(); t2.start(); } } |
Runnable接口实现卖票:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class Ticket1 implements Runnable
{ private int tick
= 5 ; public void run(){ while ( true )
{ if (tick> 0 ) System.out.println( "--卖票--" +tick--); } } } public class TicketRunnableDemo
{ public static void main(String
args[]) { Ticket1
t = new Ticket1(); Thread
t1 = new Thread(t); Thread
t2 = new Thread(t); t1.start(); t2.start(); } } |
★实现Runnable接口的Thread和MyThread ------代理设计模式
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
|
interface Runnable
{ public abstract void run(); } class Thread implements Runnable
{ public Thread(Runnable
target) { } public void run()
{ //.... } public void take()
{ System.out.println( "--代理实际模式--" ); } } class MyThread001 implements Runnable
{ public void run()
{ //.... } } public class BorrowsDemo
{ public static void main(String
args[]) { MyThread001
mt = new MyThread001(); Thread
t = new Thread(mt); t.take(); } } |
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------