java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,从而保证了该变量的唯一性和准确性。
Java中线程的同步,咱们介绍3种常见的方法,第一种使用同步代码块。
/**
* 线程间通讯,多个线程处理同一个资源,但是任务不一样
* @author xj
*
*/
/*
* 定义资源
*/
class Resource{
String name;
String sex;
}
/*
* input 输入操作
*/
class Input implements Runnable{
private Resource r;
public Input(Resource r) {
this.r = r;
}
public void run(){
int x = 0;
while(true){
synchronized (r) {
if(x == 0){
r.name = "张三";
r.sex = "男";
}
else {
r.name = "Lily";
r.sex = "女";
}
x = (x + 1)%2;
}
}
}
}
/**
* 输出
* @author xj
*
*/
class Output implements Runnable{
Resource r;
public Output(Resource r) {
this.r = r;
}
public void run(){
while(true){
synchronized (r) {
System.out.println(r.name + "...." + r.sex);
}
}
}
}
public class ResourceDemon01 {
public static void main(String[] args) {
// 创建资源
Resource r = new Resource();
// 创建任务
Input in = new Input(r);
Output out = new Output(r);
//创建线程,执行路径
Thread t1 = new Thread(in);
Thread t2 = new Thread(out);
//线程启动
t1.start();
t2.start();
}
}