public Thread(Runnable target) { init(null, target, "Thread-" + nextThreadNum(), 0); }
这个代码里面可以看到我们可以直接写一个自己的类去实现这个接口Runnable,然后创建每个Thread用一份,就可以达到了资源共享了,比如:
Runable_demo run = new Runable_demo(); // TODO Auto-generated method stub new Thread(run,"Tread one").start(); new Thread(run,"Tread two").start(); new Thread(run,"Tread three").start(); new Thread(run,"Tread four").start(); new Thread(run,"Tread five").start(); new Thread(run,"Tread six").start();
这里强调用一点,当然对于在自己实现的Runable_demo这个类里面可以直接定义一些private 非static的数据了,但是这里有个注意的是对于一个类的static变量,他们不管是不是重新new,他的资源都是共享的,比如:
new Thread(new Runable_demo(),"Tread one").start(); new Thread(new Runable_demo(),"Tread two").start(); new Thread(new Runable_demo(),"Tread three").start(); new Thread(new Runable_demo(),"Tread four").start(); new Thread(new Runable_demo(),"Tread five").start(); new Thread(new Runable_demo(),"Tread six").start();
/** * */ package thread_test; /** * @author Administrator * */ public class Runable_demo implements Runnable{ private static int g_value = 100; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub new Thread(new Runable_demo(),"Tread one").start(); new Thread(new Runable_demo(),"Tread two").start(); new Thread(new Runable_demo(),"Tread three").start(); new Thread(new Runable_demo(),"Tread four").start(); new Thread(new Runable_demo(),"Tread five").start(); new Thread(new Runable_demo(),"Tread six").start(); } /* (non-Javadoc) * @see java.lang.Runnable#run() */ @Override public void run() { while(true) { speical_print(); try { Thread.sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } synchronized void speical_print() { if(g_value > 0) System.out.println(Thread.currentThread().getName()+" : ........ value = " + g_value--); } }