设为首页 加入收藏

TOP

Java NIO文件读写操作
2014-11-24 14:14:37 来源: 作者: 【 】 浏览:1
Tags:Java NIO 文件 读写 操作

测试一:


public class ThreadSynchronized {


/**
* 由于三个线程之间没有同步,所以会出现打印错误的状况
* @param args
*/
public static void main(String[] args) {


final Activity a = new Activity();
for (int i = 0; i < 3; i++) {
new Thread(){
public void run(){
for (int i = 0; i < 20; i++) {
a.output1("zhangjin");
}
}
}.start();
}
}


}


class Activity {


public void output1(String info){
for (int i = 0; i < info.length(); i++) {
System.out.print(info.charAt(i));
}
System.out.println();
}

}


实现同步的方法:


1、同步代码块


public void output1(String info){
//锁对象
synchronized(this){
for (int i = 0; i < info.length(); i++) {
System.out.print(info.charAt(i));
}
System.out.println();
}
}


2、同步方法(锁的是this对象)


public synchronized void output1(String info){
//同步代码块,锁对象

for (int i = 0; i < info.length(); i++) {
System.out.print(info.charAt(i));
}
System.out.println();
}



3、非静态同步方法与静态同步方法之间保持同步测试



public class ThreadSynchronized {


/**
* 由于静态同步方法output2()锁住的是Activity.class(字节码),
* 而非静态同步方法output1()锁住的是this对象,所以两者之间不能保持同步



* @param args
*/
public static void main(String[] args) {


final Activity a = new Activity();
for (int i = 0; i < 3; i++) {
final int temp = i ;
new Thread(){
public void run(){
if(temp == 2){
for (int i = 0; i < 20; i++) {
a.output2("xiaoming");
}
}else{
for (int i = 0; i < 20; i++) {
a.output1("zhangjin");
}
}
}
}.start();
}
}


}


class Activity {

public synchronized static void output2(String info){
for (int i = 0; i < info.length(); i++) {
System.out.print(info.charAt(i));
}
System.out.println();
}

public synchronized void output1(String info){

for (int i = 0; i < info.length(); i++) {
System.out.print(info.charAt(i));
}
System.out.println();
}

所以,想要和静态同步方法保持同步的话,我们需要使用同步代码块,而不能使用同步方法


如讲output1更改为


public void output1(String info){
synchronized (Activity.class) {
for (int i = 0; i < info.length(); i++) {
System.out.print(info.charAt(i));
}
System.out.println();
}
}


即可。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 加载大图片时报OOM的解决.. 下一篇Android matrix camera处理图片绕..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: