Java多线程之Runable资源共享

Java多线程之Runable资源共享

之前谈到Runable能够资源共享,而Thread不能,到底什么意思呢?先看看代码

继承Thread

//使用Thread实现线程不能实现资源共享  
class MyThread extends Thread  
{     
    private int ticket=5;  
    private String name;  
    public MyThread(String name ){  
        this.name=name;  
    }  
    public void run(){  
        for(int i=0;i<10;i++){  
            if(ticket>5){  
                System.out.println("线程"+name+"卖票"+i);  
            }  
        }  
      
    }  
}  
  
public class ThreadDemo02  
{  
    public static void main(String args[]){  
        MyThread A = new MyThread("A");    
        MyThread B = new MyThread("B");  
        A.start();  
        B.start();  
    }  
}

 

实现Runable接口

//使用Runnable实现线程可以实现资源共享  
class MyThread implements Runnable  
{  
    private int ticket=5;  
    private String name;  
    public MyThread(String name){  
        this.name=name;  
    }  
    public void run(){  
        for(int i=1;i<=10;i++){  
            if(ticket>0){  
                System.out.println("线程"+name+"卖票"+(ticket--));  
                }  
        }  
    }  
}  
public class RunnableDemo02  
{  
    public static void main(String args[]){  
        MyThread A = new MyThread("A");  //实例化线程要执行的任务  
        Thread Ta = new Thread(A);    //实例两个线程对象,实际传递的是一个任务  
        Thread Tb = new Thread(A);    //因为两个线程执行的是一个任务,所以资源是共享的  
        Ta.start();  
        Tb.start();  
    }  
}

 

解释:

因为一个线程只能启动一次,通过Thread实现线程时,线程和线程所要执行的任务是捆绑在一起的。也就使得一个任务只能启动一个线程,不同的线程执行的任务是不相同的,所以没有必要,也不能让两个线程共享彼此任务中的资源。

一个任务可以启动多个线程,通过Runnable方式实现的线程,实际是开辟一个线程,将任务传递进去,由此线程执行。可以实例化多个 Thread对象,将同一任务传递进去,也就是一个任务可以启动多个线程来执行它。这些线程执行的是同一个任务,所以他们的资源是共享。

两种不同的线程实现方式本身就决定了其是否能进行资源共享。

简单来讲:

资源共享就是的让几个线程完成一个工作

猜你喜欢

转载自youyu4.iteye.com/blog/2351220