您的位置:首页 > 其它

安全多线程例子

2016-01-16 17:29 239 查看
package com.ygl;

public interface Output {

public void output(String str);

}

//**************************

package com.ygl;

public class Outputer implements Output{

public void output(String str){

int len=str.length();

synchronized(this) //或者用方法锁

{

for(int i=0;i<len;i++){

System.out.print(str.charAt(i));

}

System.out.println();

}

}

}

或者

package com.ygl;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class Outputer implements Output{

Lock lock=new ReentrantLock();

public void output(String str){

int len=str.length();

lock.lock();

try{

for(int i=0;i<len;i++){

System.out.print(str.charAt(i));

}

System.out.println();

}finally{

lock.unlock();

}

}

}

//************************************

package com.ygl;

public class MyRunnable implements Runnable{

private Output obj;

private String str;

public MyRunnable ( Output obj,String str){

this.obj=obj;

this.str=str;

}

public MyRunnable (){

}

@Override

public void run() {

while(true){

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

obj.output(str);

}

}

}

//*********************************

package com.ygl;

public class TraditionalThreadSynchronized {

public static void main(String[] args) {

Output output=new Outputer();

Runnable runnable1 =new MyRunnable(output,"ygl");

Runnable runnable2 =new MyRunnable(output,"liming");

Thread thread1=new Thread(runnable1);

thread1.start();

Thread thread2=new Thread(runnable2);

thread2.start();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: