Runnable,Thread实现多线程以及Runnable的同步资源共享

王朝学院·作者佚名  2016-08-27  
宽屏版  字体: 小 | 中 | 大 | 超大  

(一)

实现多线程有两种方式

(1)

继承Thread类,重写run()方法,如以下例子

class MyThread extends Thread{

public void run(){

//

}

}

class Main{

public void main(String[] args){

MyThread thread=new Mythread();

thread.start();

}

}

(2)

利用runnable接口实现,但是若只是定义了Runnable对象,如

public class Myobject

{

public static void main(String[] args)

{

//System.out.PRintln("主线程" + Thread.currentThread().getName());

Runnable myRunnable = new Runnable()

{

@Override

public void run()

{

System.out.println(Thread.currentThread().getName());

}

};

}

}

Runnable对象必须依赖一个Thread类才能真正意义上说是另外开辟了一个线程,不然是默认在主线程中的,在Android更新UI有这种应用,利用runOnUiThread(runnable)来在主线程的某一块调用Runnable的run方法,此时并没有开辟另外的线程,而是在主线程中执行的,这一点应该分清楚。

真正意义上的开辟另外的线程看下面,需要Thread.start()来调用Runnable接口的run方法

class MyThread implements Runnable{

public void run(){

//

}

}

class Main{

public static void main(String[] args){

MyThread thread=new MyThread();//实例化runnable对象

Thread thread1=new Thread(thread);//通过Thread实例化runnable对象

thread1.start();//利用Thread线程类启动Runnable接口的run方法

}

}

(二)在利用Runnable进行多线程时,则有时候需要资源共享

当分配一个任务给多人时,假如要实现资源共享那么就用到

synchronized (this){

同步代码块

}

那我们就举个买票的例子

定义个ThreadTicket类

package MyThread;

public class ThreadTicket

{

public static void main(String[] args)

{

MyThread myThread1=new MyThread();

Thread t1 = new Thread(myThread1);//一窗口

Thread t2 = new Thread(myThread1);//二窗口

Thread t3 = new Thread(myThread1);//三窗口

t1.start();

t2.start();

t3.start();

}

}

此时的实现MyThread接口类

package MyThread;

public class MyThread implements Runnable

{

private int ticket = 10;

@Override

public void run()

{

//synchronized (this)

//{

for (int i = 0; i < 10; i++)

{

try

{

Thread.sleep(500);

} catch (InterruptedException e)

{

// TODO 自动生成的 catch 块

e.printStackTrace();

}

if (ticket > 0)

System.out.println("车票 :" + ticket--);

}

//}

}

}

由MyThread类可以得出此时的购票总数是10张票,分三个窗口买,那么此时就需要三个窗口共享票源,当没票时就不再进行售票

当不添加synchronized关键字时,此时显示的结果为

可以看到此时的结果是杂乱无章,完全没有达到资源共享

此时应该利用synchronized(this)

{

//code

}

同步代码块来实现资源共享

就是将MyThread的synchronized部分注释解除,此时的结果为

成功实现了资源共享的目的。

Runnable的很大的优点就在于资源共享。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有