(1)当访问共同的代码的时候:可以使用同一个Runnable对象,这个Runnable对象中有这个共享数据,比如卖票系统就可以这么做。或者这个共享数据封装在一个对象当中,然后对这个对象加锁,也可以实现数据安全访问。publicclassInterfacaesharethread{
publicstaticvoidmain(String[]args){
Mythread1mythread=newMythread1();
newThread(mythread).start();
newThread(mythread).start();
newThread(mythread).start();
newThread(mythread).start();
}
}
/*实现Runnable接口*/
classMythread1implementsRunnable{
intindex=0;
publicsynchronizedvoidrun(){
while(true)
System.out.println(Thread.currentThread().getName()+"isrunningandtheindexis"+index++);
}
}
(2)当各个线程访问的代码不同时:这时候要使用不同的Runnable对象,
将Runnable对象作为某一个类中的内部类,共享数据作为这个外部类的成员变量,每个线程对共享数据的访问也交给外部类的方法,比便对共享数据的互斥和通信。Runnable对象调用外部类的操作这个共享数据的方法。
publicclassInnersharethread{
publicstaticvoidmain(String[]args){
Mythreadmythread=newMythread();
mythread.getThread().start();
mythread.getThread().start();
mythread.getThread().start();
mythread.getThread().start();
}
}
/**
*通过内部类实现线程的共享变量
*
*/
classMythread{
intindex=0;
privateclassInnerThreadextendsThread{
publicsynchronizedvoidrun(){
while(true){
System.out.println(Thread.currentThread().getName()
+"isrunningandindexis"+index++);
}
}
}
publicThreadgetThread(){
returnnewInnerThread();
}
}
参考文章:
原文:http://tianxingzhe./3390077/1693465