在多线程的实现方式中,Thread类与Runnable接口在使用上存在区别,如继承Thread的类不适合多个线程共享资源,而实现了Runnable接口可以方便的实现资源共享。
package com.zgy.bean;
public class thread3 extends Thread {
/**
* @param args
*/
private int ticket = 5;
private String name;
public thread3(String name){
this.name = name;
}
public void run(){
for(int i=1;i<=5;i++){
//还有票时,进行售票操作
if(ticket>0)
{
System.out.println(name+"卖票:ticket="+ticket--);
}
}
}
public static void main(String[] args) {
thread3 t1=new thread3("线程A");
thread3 t2=new thread3("线程B");
thread3 t3=new thread3("线程C");
t1.start();
t2.start();
t3.start();
}
}
在上面的例子中,我们可以看得出,程序中启动了3个线程,却分别卖出了各自的5张票,没有达到资源共享的目的。因为创建了3个线程就等于是创建了3个资源,每个线程对象都有5张票需要卖出,并且他们是独立的处理各自的资源。
从接下来的例子的运行结果中我们就可以看的出,Runnable能实现多个线程共享一个资源。
运行结果如下:
卖出:ticket=5
卖出:ticket=4
卖出:ticket=3
卖出:ticket=2
卖出:ticket=1
源代码如下:
package com.zgy.bean;
public class run3 implements Runnable{
/**
* @param args
*/
private int ticket = 5;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<=5;i++){
if(ticket>0){
System.out.println("卖出:ticket="+ticket--);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
run3 r=new run3();
new Thread(r).start();
new Thread(r).start();
new Thread(r).start();
}
}
在多个线程中,实现Runnable接口与继承Thread类相比具备以下优势:
1.适合多个具有相同程序代码的线程处理同一个资源。
2.可以避免Java的单继承特征带来的局限。
3.代码能够被多个线程共享且与数据独立存在,从而增强了程序的健壮性。
package com.zgy.bean;
public class thread3 extends Thread {
/**
* @param args
*/
private int ticket = 5;
private String name;
public thread3(String name){
this.name = name;
}
public void run(){
for(int i=1;i<=5;i++){
//还有票时,进行售票操作
if(ticket>0)
{
System.out.println(name+"卖票:ticket="+ticket--);
}
}
}
public static void main(String[] args) {
thread3 t1=new thread3("线程A");
thread3 t2=new thread3("线程B");
thread3 t3=new thread3("线程C");
t1.start();
t2.start();
t3.start();
}
}
在上面的例子中,我们可以看得出,程序中启动了3个线程,却分别卖出了各自的5张票,没有达到资源共享的目的。因为创建了3个线程就等于是创建了3个资源,每个线程对象都有5张票需要卖出,并且他们是独立的处理各自的资源。
从接下来的例子的运行结果中我们就可以看的出,Runnable能实现多个线程共享一个资源。
运行结果如下:
卖出:ticket=5
卖出:ticket=4
卖出:ticket=3
卖出:ticket=2
卖出:ticket=1
源代码如下:
package com.zgy.bean;
public class run3 implements Runnable{
/**
* @param args
*/
private int ticket = 5;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=1;i<=5;i++){
if(ticket>0){
System.out.println("卖出:ticket="+ticket--);
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
run3 r=new run3();
new Thread(r).start();
new Thread(r).start();
new Thread(r).start();
}
}
在多个线程中,实现Runnable接口与继承Thread类相比具备以下优势:
1.适合多个具有相同程序代码的线程处理同一个资源。
2.可以避免Java的单继承特征带来的局限。
3.代码能够被多个线程共享且与数据独立存在,从而增强了程序的健壮性。