`
Luob.
  • 浏览: 1592556 次
  • 来自: 上海
社区版块
存档分类
最新评论

java 线程同步

    博客分类:
  • Java
阅读更多
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 线程同步  synchronize  
 */
public class TraditionalThreadSynchronized {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new TraditionalThreadSynchronized().init();
	}
	
	private void init(){
		final Outputer out=new Outputer();
		new Thread(
		new Runnable() {
			@Override
			public void run() {
				// TODO Auto-generated method stub
				while (true) {
					try {
						Thread.sleep(10);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					out.output("English");
				}
			}
		}
		).start();
		
		new Thread(
			new Runnable() {
				@Override
				public void run() {
					// TODO Auto-generated method stub
					while (true) {
						try {
							Thread.sleep(10);
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						out.output("Chinese");
					}
					
				}
			}
		).start();
		
	}
	
	//使用各种 同步锁对象   this,.class ,Object ,Lock 
	static class Outputer{
		String sync="";
		public void output(String name){
			int len=name.length();
			synchronized(this){  //只有是同一对象的时候才能用this,否则  只能用.class,或者 建立一个  static Object sycn
				for (int i = 0; i < len; i++) {
					System.out.print(name.charAt(i));
				}
				System.out.println();
			}
		} 
		
		public synchronized void output2(String name){  //使用的是 this 
			int len=name.length();
				for (int i = 0; i < len; i++) {
					System.out.print(name.charAt(i));
				}
				System.out.println();
		} 
		
		
		public static synchronized void output3(String name){  //使用的是 .class 
			int len=name.length();
				for (int i = 0; i < len; i++) {
					System.out.print(name.charAt(i));
				}
				System.out.println();
		}
		
		Lock lock=new ReentrantLock();
		public void output4(String name){
			int len=name.length();
			lock.lock();   //使用 jdk 1.5 提供的锁
			try {
				for (int i = 0; i < len; i++) {
					System.out.print(name.charAt(i));
				}
				System.out.println();
			} catch (Exception e) {
				// TODO: handle exception
			}finally{
				lock.unlock();
			}
				
		} 
		
		
		
	}

}
分享到:
评论

相关推荐

    java 线程同步 信号量控制同步

    Java 线程同步控制机制 线程同步是 Java 编程中的一种机制,用于控制多个线程之间的资源访问顺序,以避免线程之间的冲突和数据不一致。线程同步的目的就是避免线程“同步”执行,即让多个线程之间排队操作共享资源...

    java线程同步详解

    总结一下,Java线程同步的关键点: 1. **线程同步是为了解决共享资源的并发访问问题,防止数据不一致和冲突。** 2. **同步意味着线程排队,依次访问共享资源,而不是同时访问。** 3. **只有共享变量(可变状态)才...

    Java 线程同步调用

    在深入探讨Java线程同步调用这一主题之前,我们首先需要理解线程同步的基本概念及其在多线程环境中的重要性。线程同步是多线程编程中的一个关键概念,它确保了多个线程在访问共享资源时不会发生冲突,避免了数据不...

    java线程同步及通信

    Java线程同步与通信是多线程编程中的关键概念,用于解决并发访问共享资源时可能出现的数据不一致性和竞态条件问题。以下将详细介绍这两个主题,以及如何通过代码示例进行演示。 1. **线程同步**: 线程同步是确保...

    java线程同步java线程同步

    java线程同步java线程同步java线程同步

    JAVA100例之实例65 JAVA线程同步

    本实例65着重讲解了Java线程同步的实现方法,帮助开发者理解和掌握如何在并发环境中保证代码的正确执行。 首先,我们要了解什么是线程。线程是程序中的执行流,每个线程都有自己的程序计数器、栈、局部变量和常量,...

    Java线程同步例子.pdf

    在Java中,线程同步是保证多线程安全...上述Java线程同步例子中涉及到的代码虽然是片段,但涵盖了线程同步处理的多个重要方面,帮助我们理解和使用Java线程同步机制,以及在设计和实现多线程应用程序时的实践和技巧。

    java线程同步基础知识

    Java线程同步是Java编程中一个关键的概念,用于解决多线程环境下的数据一致性问题。在Java中,线程同步主要依赖于监视器(Monitor)机制,它支持两种线程行为:互斥和协作。 互斥是通过对象锁来实现的,确保在任意...

    java线程同步的例子.doc

    Java线程同步是一种控制多个线程访问共享资源的方式,确保数据的一致性和完整性。在这个例子中,我们将讨论如何使用`synchronized`关键字实现线程同步,以及它的工作原理。 首先,我们有两个类`ThreadDemo`和`...

    java 线程同步

    Java线程同步是多线程编程中的一个关键概念,它涉及到如何在并发环境中控制线程对共享资源的访问,以避免数据不一致性和竞态条件等问题。在Java中,线程同步主要有以下几种机制: 1. **synchronized 关键字**: - ...

    Java线程同步与 Java 并发设施.pdf

    Java线程同步是多线程编程中的一个重要概念,其主要目的是确保多个线程在访问共享资源时能够有序进行,避免数据不一致性和竞态条件。在Java中,线程同步可以通过多种方式实现,如synchronized关键字、java.util....

    java线程同步的例子.pdf

    Java线程同步是一种确保多个线程在访问共享资源时能够有序执行的技术,避免了数据的不一致性和竞态条件。在给定的示例中,通过两种方式展示了线程同步:synchronized方法和synchronized代码块。 首先,我们来看同步...

    java线程同步的例子[文].pdf

    本文将详细解释Java线程同步的概念,并通过示例代码来说明其工作原理。 首先,我们需要理解Java中的两个主要同步机制:`synchronized`关键字和`wait()`, `notify()`, `notifyAll()`方法。`synchronized`关键字可以...

    java线程同步(实例讲解,清晰易懂)

    ### Java线程同步详解 #### 一、同步问题的提出 在多线程环境中,当多个线程同时访问和修改同一个共享资源时,可能会导致数据的一致性和完整性问题。例如,考虑下面的一个简单示例: ```java public class Foo { ...

Global site tag (gtag.js) - Google Analytics