Synchronized()与wait()用法
2014-10-16 11:03
176 查看
浅显解释Synchronized()与wait()用法
一直不理解Synchronized()与wait()到底什么意思,到底怎么用。现在有了一些基本的认识,拿来共享
这里以一个例子说明问题,注释部分会解释清楚
JAVA代码
package changhanming;
public class ThreadA {
public static void main(String[] args) throws InterruptedException {
ThreadB b = new ThreadB();
// 启动计算线程,启动B里的run();
b.start();
synchronized (b) { //为了防止B里的synchronized同时执行。其实A给B上锁
// 当前线程A等待,这里注意的是wait()方法是使当前线程,A线程等待。
//若没有wait,则A和B两个线程同步,这时A首先抢占到资源,运行。B还没运行,所以此时计算结果为0
//若启动wait,则让当前线程A等待。B运行结束后,再唤醒A
b.wait(); //A放弃B锁,让B执行
System.out.println("计算结果:" + b.sum);
}
class ThreadB extends Thread {
int total;
public void run() {
synchronized (this) {
for (int i = 0; i < 10; i++) {
sum += i;
}
// (完成计算了)唤醒线程A
notifyAll();
}
}
}
一直不理解Synchronized()与wait()到底什么意思,到底怎么用。现在有了一些基本的认识,拿来共享
这里以一个例子说明问题,注释部分会解释清楚
JAVA代码
package changhanming;
public class ThreadA {
public static void main(String[] args) throws InterruptedException {
ThreadB b = new ThreadB();
// 启动计算线程,启动B里的run();
b.start();
synchronized (b) { //为了防止B里的synchronized同时执行。其实A给B上锁
// 当前线程A等待,这里注意的是wait()方法是使当前线程,A线程等待。
//若没有wait,则A和B两个线程同步,这时A首先抢占到资源,运行。B还没运行,所以此时计算结果为0
//若启动wait,则让当前线程A等待。B运行结束后,再唤醒A
b.wait(); //A放弃B锁,让B执行
System.out.println("计算结果:" + b.sum);
}
class ThreadB extends Thread {
int total;
public void run() {
synchronized (this) {
for (int i = 0; i < 10; i++) {
sum += i;
}
// (完成计算了)唤醒线程A
notifyAll();
}
}
}
相关文章推荐
- java中关于线程间协作所用关键字synchronized,wait,notify的用法
- synchronized notify wait的用法
- java多线程synchronized,wait,notify的大致用法
- multithreading--synchronized对象锁以及对象的notify(),notifyAll(),wait()等的用法
- java多线程中的synchronized和wait/notify用法总结
- WaitForSingleObject与WaitForMultipleObjects用法详解
- Synchronized(一)------java中Synchronized的用法
- java多线程中synchronized关键字的用法
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- 同步synchronized用法
- synchronized的4种用法
- synchronized用法的理解
- synchronized 关键字的详细用法
- java中synchronized的用法详解
- sem_timedwait的用法
- java多线程关键字synchronized用法
- WaitForSingleObject和WaitForMultipleObjects用法
- java synchronized关键字的用法
- Java线程中sleep()、wait()和notify()和notifyAll()、suspend和resume()、yield()、join()、interrupt()的用法和区别
- Java中Synchronized的用法