安全多线程例子
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();
}
}
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();
}
}
相关文章推荐
- bzoj3583: 杰杰的女性朋友 && 4362: Graph
- JAVA线程池原理以及常用线程池介绍
- 从一道题目验证Servlet单实例
- Eclipse 智能提速和推荐10个快捷键
- MD5 加密 参数加密解密
- 边缘滑动返回
- LayoutParams 参数含义及转换dp
- Maven内置属性及使用
- spark源码解析之基本概念
- SQL SERVER中的流程控制语句
- 数据库访问性能优化 Oracle
- Linux查看当前系统登录用户、登录日志、登录错误日志
- equal与== 个人笔记
- mysql 5.6密码强度插件使用
- Tomcat启动超时
- WebStorm无法安装gulp-htmlbuild,提示git clone … undefined错误的解决方法
- 【已解决】PHP项目需求:用户购买商品时,给上级发送一条通知(无限级下级会员)
- SELinux深入理解
- NMF非负矩阵分解以及更新迭代公式
- pbc加密系统开发反思教训!