标签:
线程同步: 当多个线程访问同一个数据资源时,会造成数据的不正确 。则,当同时访问时必须确定一个线程访问,其他线程暂不可访问
在Java中 提出了对象互锁斥 使用synchronized 表示该线程被锁住,只能被当前线程访问,其他线程等待,暂不可访问
实例:
package com.exmaple.Thread;
public class Test5 extends Thread{
private static Runnab r;
/**
* 线程同步 当多个线程访问同一个数据资源时,会造成数据的不正确
* 则,当同时访问时必须确定一个线程访问,其他线程暂不可访问
* 在Java中 提出了对象互锁斥 使用synchronized 表示该线程被锁住,只能
* 被当前线程访问,其他线程等待,暂不可访问
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
r=new Runnab();
//创建两个线程, 设置线程名,并开启
Test5 t=new Test5();
Thread t1=new Thread(t);
Thread t2=new Thread(t);
t1.setName("name1");
t2.setName("name2");
t1.start();
t2.start();
}
//主方法实现接口,通过调用方法,拿到线程的name,从而可以得到不同的值
@Override
public void run() {
// TODO Auto-generated method stub
r.add(Thread.currentThread().getName()) ;
}
}
class Runnab {
int num=0;
//若没有synchronized,线程t1执行,num=1,线程t1睡眠;线程t2执行,num=2,线程t2休眠;t1执行打印 2,t2执行打印 2
//有synchronized 线程t1执行,线程2等待;线程t1执行完 num=1 线程t2开始执行 num=2
public synchronized void add(String name){
num++;
try{
Thread.sleep(1);
}catch (Exception e){
}
System.out.println("第"+num+"ge");
}
}
标签:
原文地址:http://www.cnblogs.com/meijing/p/4580509.html