为什么会有线程同步的概念呢?为什么要同步?什么是线程同步?先看一段代码:
package com.maso.test; public class ThreadTest2 implements Runnable{ private TestObj testObj = new TestObj(); public static void main(String[] args) { ThreadTest2 tt = new ThreadTest2(); Thread t1 = new Thread(tt, "thread_1"); Thread t2 = new Thread(tt, "thread_2"); t1.start(); t2.start(); } @Override public void run() { for(int j = 0; j < 10; j++){ int i = fix(1); try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " : i = " + i); } } public int fix(int y){ return testObj.fix(y); } public class TestObj{ int x = 10; public int fix(int y){ return x = x - y; } } }
输出结果后,就会发现变量x被两个线程同时操作,这样就很容易导致误操作。如何才能解决这个问题呢?用线程的同步技术,加上synchronized关键字
public synchronized int fix(int y){
return testObj.fix(y);
}
加上同步后,就可以看到有序的从9输出到-10.
如果加到TestObj类的fix方法上能不能实现同步呢?
public class TestObj{
int x = 10;
public synchronized int fix(int y){
return x = x - y;
}
}
如果将synchronized加到方法上则等价于
synchronized(this){
}
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, 线程
, thread
, 多线程 线程同步
, synchronized
, 同步
, public
android 同步
多线程同步和互斥、多线程同步互斥、多线程的同步和互斥、多线程死锁、java多线程死锁,以便于您获取更多的相关知识。