`
xueyi_lee
  • 浏览: 36139 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java多线程中的synchronized和wait/notify用法总结

    博客分类:
  • java
阅读更多
自学java也有一段时间了,自我感觉java中的多线程还是比较重要的。至于线程的概念,也没有必要说的那么玄乎,引用马士兵老师的话就很好理解:线程就是程序执行的路径。多线程,也就不难理解了,程序执行的多条路径,它们独立执行,但是又有莫大的联系。synchronized关键字用于同步,也就是对对象进行加锁,防止由于同时访问同一个对象而造成的混乱。wait/notify字面意思是等待和告知,那么是谁等待,等待完了又告知谁呢?下面用一个例子说明。
public class ThreadA {
	public static void main(String[] args) {
		ThreadB b = new ThreadB();
		b.start();//主线程中启动另外一个线程
		System.out.println("b is start....");
		//括号里的b是什么意思,应该很好理解吧
		synchronized(b) {
			try {
				System.out.println("Waiting for b to complete...");
				b.wait();//这一句是什么意思,究竟谁等待?
				System.out.println("ThreadB is Completed. Now back to main thread");
				}catch (InterruptedException e){}
		}
		System.out.println("Total is :" + b.total);
		}
}

class ThreadB extends Thread {
		int total;
		public void run() {
			synchronized(this) {
				System.out.println("ThreadB is running..");
				for (int i=0; i<=100; i++ ) {
					total += i;
				}
				System.out.println("total is " + total);
				notify();
			}
		}
}


运行结果:
b is start....
Waiting for b to complete...
ThreadB is running..
total is 5050
ThreadB is Completed. Now back to main thread
Total is :5050
从程序运行的结果来看就不难理解wait/notify了,wait是让使用wait方法的对象等待,暂时先把对象锁给让出来,给其它持有该锁的对象用,其它对象用完后再告知(notify)等待的那个对象可以继续执行了,整个过程就是这样。wait/notify主要用于一个线程要等待另一个线程执行完后,然后得到执行结果的情况。
呵呵,总体应该表达清楚了吧……
0
0
分享到:
评论
4 楼 namelujl 2012-03-14  
b is start....
ThreadB is running..
Waiting for b to complete...
total is 5050
ThreadB is Completed. Now back to main thread
Total is :5050
3 楼 namelujl 2012-03-14  
package cn.com.zsgc.thread;

/**
*
* @author liujianlinag E-mail:namelujl@163.com
* @version 1.0
*
*/
public class ThreadB extends Thread {  
    int total;  
    public void run() {  
        synchronized(this) {  
            System.out.println("ThreadB is running..");  
            for (int i=0; i<=100; i++ ) {  
                total += i;  
            }
            try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
            System.out.println("total is " + total);  
              notify();
        }  
    }  

2 楼 namelujl 2012-03-14  
package cn.com.zsgc.thread;

/**
*
* @author liujianlinag E-mail:namelujl@163.com
* @version 1.0
*
*/
public class ThreadA {  
    public static void main(String[] args) {  
        ThreadB b = new ThreadB();  
        b.start();      
        System.out.println("b is start....");  
        synchronized(b) {
        System.out.println("Waiting for b to complete..."); 
                b.notify();
                try {
b.wait();
} catch (InterruptedException e1) {
e1.printStackTrace();
}
                System.out.println("ThreadB is Completed. Now back to main thread");            
        }  
        System.out.println("Total is :" + b.total);  
        }  
}  
1 楼 namelujl 2012-03-14  

相关推荐

    Java 同步方式 wait和notify/notifyall

    总结一下,`wait()`, `notify()`, 和 `notifyAll()` 是Java多线程编程中的核心工具,它们与`synchronized`关键字一起,为线程间的协作提供了强大的支持。理解并熟练掌握这些概念,对于编写高效、安全的多线程程序至...

    java之wait,notify的用法([ 详解+实例 ])

    在Java多线程编程中,wait和notify是两个非常重要的方法,它们都是Object类的方法,用于线程之间的通信和同步。下面我们将详细解释wait和notify的用法。 wait方法 wait方法是Object类的一个方法,用于让当前线程...

    Java多线程wait和notify

    在Java中,`wait()` 和 `notify()` 方法是实现线程间通信和协作的重要工具,它们属于 `java.lang.Object` 类,这意味着所有类都默认继承了这两个方法。本文将详细探讨如何使用 `wait()` 和 `notify()` 来控制子线程...

    Java多线程同步(wait()notify()notifyAll())[文].pdf

    本文将深入探讨Java中的wait()、notify()和notifyAll()方法,以及synchronized关键字和原子操作在多线程环境中的应用。 1. **wait()方法**: - wait()是Object类的一个方法,它的作用是让当前线程暂停执行并释放它...

    浅谈java多线程wait,notify

    在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地理解和掌握这两个机制。 wait机制 在Java中,wait机制用于暂停当前线程的执行,并释放当前对象的锁,以便让其他线程获得锁并...

    java多线程Demo

    在Java中,实现多线程有两种主要方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当我们创建一个新的类,让它继承Thread类时,可以通过重写`run()`方法来定义线程执行的任务。然后创建该类的对象,并...

    Java的sychronized、wait和notify范例

    在提供的压缩包文件`java_sychronization`中,可能包含了一些示例代码,用于演示如何在Java中使用`synchronized`关键字以及`wait()`和`notify()`方法。通过研究这些样例,你可以更深入地了解这些工具的用法和效果。...

    Java多线程管理示例

    在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程的核心概念、同步机制、死锁问题以及wait/notify机制,以"生产者与消费者"的例子来具体阐述。 首先,了解Java中的...

    多线程系列相关的技术要点

    5. Java多线程学习(四)等待/通知(wait/notify)机制 6. Java多线程学习(五)线程间通信知识点补充 7. Java多线程学习(六)Lock锁的使用 8. Java多线程学习(七)并发编程中一些问题 9. Java多线程学习(八...

    java多线程设计wait[参考].pdf

    Java中的多线程设计涉及到许多核心概念,其中wait/notify机制是实现线程间通信和协作的关键工具。这个机制主要用于解决资源的分配和同步问题,它依赖于Java的内置锁机制,即`synchronized`关键字和对象锁。 首先,...

    Java多线程技术在网络通信系统中的应用.pdf

    在Java中实现多线程网络通信,通常需要服务器和客户端两个组件。传统的服务器只能与一个客户端通信,导致其他客户端必须等待,影响效率。随着技术的发展,现在一个服务器可以同时与多个客户端进行通信,Java的多线程...

    java多线程的讲解和实战

    Java多线程是Java编程中的重要概念,尤其在如今的多核处理器环境下,理解并熟练掌握多线程技术对于提高程序性能和响应速度至关重要。本资料详细讲解了Java多线程的原理,并提供了丰富的实战代码,非常适合Java初学者...

    Java多线程知识点总结

    同样,当线程使用wait方法时,它会主动释放锁并进入等待状态,直到其他线程调用notify或notifyAll方法来唤醒它。此外,sleep方法可以使线程进入阻塞状态一段时间,而join方法则允许一个线程等待另一个线程完成其任务...

    Java多线程中wait、notify、notifyAll使用详解

    Java中多线程编程中,wait、notify、notifyAll三个方法是非常重要的,它们都是Object对象的方法,用于线程之间的通信。下面我们将详细介绍这三个方法的使用和作用。 一、wait()方法 wait()方法是使当前线程自动...

    java多线程经典案例

    Java中,可以通过wait()、notify()和notifyAll()这三个Object类的方法来实现线程间的通信。这些方法必须在同步环境中使用,否则会抛出异常。此外,Java 5引入了BlockingQueue阻塞队列,它是一种线程安全的数据结构,...

    java多线程进度条

    为了在多线程中同步进度更新,我们可以利用synchronized关键字、wait()、notify()方法,或者使用Java并发库中的高级工具,如Semaphore、CyclicBarrier或CountDownLatch等。 一个简单的进度条实现可以采用共享变量...

    Java 同步锁 wait notify 学习心得

    标题和描述概述的知识点主要集中在Java的多线程机制中,特别是`wait`和`notify`方法在同步锁中的应用。这些方法对于控制线程之间的交互至关重要,尤其是在资源有限或需要确保数据一致性的情况下。 ### Java同步锁...

    java中几个notify、wait使用实例

    在Java的多线程编程中,`notify()`与`wait()`是实现线程间通信的重要方法,它们主要...此外,`wait()`方法的使用总是伴随着`synchronized`块或方法,确保了锁的正确管理和释放,从而保障了多线程程序的正确性和稳定性。

    java多线程并发实战和源码

    总结来说,Java多线程并发实战和源码的学习涵盖了线程创建与管理、同步机制、并发容器、内存模型以及并发工具类等多个方面。虽然书中实例不足,但通过结合其他资源,如jcip-examples-src.rar中的代码,可以进一步...

    Java线程中wait,await,sleep,yield,join用法总结.pdf

    在Java编程中,多线程的使用是实现程序并发运行的重要手段。本文将总结五个关键的线程控制方法:wait()、await()、sleep()、yield()和join()。这些方法各自有独特的用途和不同的工作机制。 一、wait()、notify()、...

Global site tag (gtag.js) - Google Analytics