`
百合不是茶
  • 浏览: 354028 次
社区版块
存档分类
最新评论

线程同步和异步

阅读更多

多线程和同步 : 如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。

所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法

 

多线程和异步:多线程可以做不同的事情,涉及到线程通知

 

 

   线程同步中的几个概念: 

 

1.使用同步块

synchronized(Object){

 

}

2.synchronized方法

 

3.同步锁Lock   用来锁代码的

Lock lc = new ReentrantLock();

lc.lock();

lc.unlock();

 

 

 

看下面的简单例题:

package com.iteye.com;

public class TestSync implements Runnable {
	  Tmer timer = new Tmer();
	  public static void main(String[] args) {
	    TestSync test = new TestSync();
	    Thread t1 = new Thread(test);
	    Thread t2 = new Thread(test);
	    t1.setName("t1"); 
	    t2.setName("t2");
	    t1.start(); 
	    t2.start();
	  }
	  public void run(){
	    timer.add(Thread.currentThread().getName());
	  }
	}

	class Tmer{
	  private static int num = 0;
	  public  void add(String name){ 
	  	//synchronized (this) {
		    num ++;
		    try {
		    	Thread.sleep(1);
		    } 
		    
		    catch (InterruptedException e) {
		    	
		    }
		    System.out.println(name+", 你是第"+num+"个使用timer的线程");
		  //}
	  }
	}

  很显然没有使用同步锁,会导致这个结果

      同步锁的作用就是在t1执行时,别的线程不能执行,这样才不会导致进程中的数据混乱,出现下面的错误

结果:
t1, 你是第2个使用timer的线程
t2, 你是第2个使用timer的线程

 

 

下面是加同步锁的:

package com.iteye.com;

public class TestSync implements Runnable {
	  Tmer timer = new Tmer();
	  public static void main(String[] args) {
	    TestSync test = new TestSync();
	    Thread t1 = new Thread(test);
	    Thread t2 = new Thread(test);
	    t1.setName("t1"); 
	    t2.setName("t2");
	    t1.start(); 
	    t2.start();
	  }
	  public void run(){
	    timer.add(Thread.currentThread().getName());
	  }
	}

	class Tmer{
	  private static int num = 0;
	  public synchronized void add(String name){ 
	  	//synchronized (this) {
		    num ++;
		    try {
		    	Thread.sleep(1);
		    } 
		    
		    catch (InterruptedException e) {
		    	
		    }
		    System.out.println(name+", 你是第"+num+"个使用timer的线程");
		  //}
	  }
	}

 

运行结果:

 t1, 你是第1个使用timer的线程

t2, 你是第2个使用timer的线程

 

 

 

 

1
0
分享到:
评论

相关推荐

    vc 多线程实例同步,异步

    本实例主要探讨如何在VC++中创建多线程,尤其是工作者线程(Worker Threads)和用户界面(UI)线程,以及如何进行线程同步和异步操作。 首先,我们要理解线程的基本概念。线程是操作系统分配CPU时间的基本单元,一...

    进程线程通信,线程同步,异步,进程通信经典进程间通信.7z

    在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...

    c#线程同步与异步编程

    在C#编程中,线程同步与异步是并发编程中的关键概念,它们涉及到如何有效地管理多线程环境中的资源和执行顺序。本教程将深入探讨这两个概念,以帮助初学者更好地理解和应用。 同步编程是程序执行的一种方式,其中...

    线程同步与异步套接字编程

    在计算机编程领域,尤其是网络编程中,线程同步与异步套接字编程是至关重要的概念,它们直接影响到程序的性能、稳定性和可扩展性。本文将深入探讨这两个主题,并结合实际应用进行详细阐述。 首先,我们需要理解线程...

    C# 多线程同步、异步_AutoResetEvent用法

    在Visual Studio 2008中,创建多线程项目时,可以选择"新建项目"->"Visual C#"->"Windows应用程序",然后在代码中引入`System.Threading`命名空间,即可使用`AutoResetEvent`进行多线程同步和异步操作。 总结,`...

    C++的线程同步与异步套接字编程源码.zip

    在C++编程中,线程同步和异步套接字编程是两个重要的概念,尤其是在开发高性能、多用户并发的网络应用程序时。线程同步确保了数据的一致性和完整性,而异步套接字则提供了非阻塞的网络通信方式,提高了程序的执行...

    visual c++ MFC之Lesson16线程同步与异步套接字编程

    在Visual C++ MFC编程中, Lesson16主要讲解了线程同步和异步套接字编程的关键概念和技术。线程同步是多线程编程中一个重要的方面,它确保了在共享资源时避免数据冲突和死锁。异步套接字编程则是Windows环境下网络...

    线程异步工作,当一个线程结束时异步通知另一线程

    这个过程通常涉及到线程同步和异步的概念。本文将深入探讨线程异步工作以及如何在C++中实现一个线程在结束时异步通知另一个线程,而无需等待。 线程异步工作是指线程之间不直接依赖彼此的执行顺序,它们可以独立地...

    C#多线程,线程同步 异步 学习

    线程同步和异步操作在多线程编程中至关重要。同步操作确保线程按照特定顺序执行,防止数据竞争。C#提供了多种同步机制,如`Mutex`、`Semaphore`、`Monitor`(对象锁)、`Lock`关键字以及`WaitHandle`类等。异步操作...

    java 线程之对象的同步和异步(实例讲解)

    在 Java 编程中,线程同步和异步是一种重要的机制,用于控制多线程环境下的资源访问和数据的一致性问题。下面,我们将通过实例讲解来详细介绍 Java 线程之对象的同步和异步。 一、多线程环境下的同步与异步 在多...

    并发、多线程、同步异步概念.docx

    ### 并发、多线程、同步异步概念解析 #### 一、并发与多线程 **并发**(Concurrency)是指多个任务看起来同时进行的一种现象。在计算机领域,特别是操作系统层面,它指的是一个时间段内有多个程序或任务都在运行...

    Lesson16线程同步与异步套接字编程

    线程同步与异步套接字编程 线程同步与异步套接字编程

    C#多线程同步与异步的实现

    根据给定的文章信息,本文将深入探讨C#在.NET平台上进行多线程程序设计的方法,特别是多线程同步与异步的实现。 ### C#多线程同步与异步的实现 #### 一、多线程概念 多线程是现代操作系统支持的一种并发处理方式...

    spring线程池(同步、异步).docx

    2. `SyncTaskExecutor`:这是一个同步执行器,任务在同一线程中执行,不涉及多线程,适合用于同步调用,而非异步执行。 3. `ThreadPoolTaskExecutor`:这是Spring最常用的线程池实现,它包装了`java.util.concurrent...

    vc++ 线程同步与异步套接字编程实例

    vc++ 线程同步与异步套接字编程实例,Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非...

    delphiXE多线程同步对象及异步执行.zip

    Delphi提供了各种同步对象,如TCriticalSection、TSemaphore、TMutex等,来实现线程同步。例如,TCriticalSection用于在多线程中保护临界区,确保同一时间只有一个线程能进入该区域。使用TryEnterCriticalSection和...

    C#.net同步异步SOCKET通讯和多线程总结

    本文将对C#.NET中的同步和异步SOCKET通讯以及多线程应用进行详细讲解,并结合提供的代码片段进行分析。 首先,我们需要理解同步和异步的概念。在C#.NET中,同步通讯是指客户端和服务器之间的数据传输在同一个线程中...

    C#多线程同步与异步的实现[归纳].pdf

    C#多线程同步与异步的实现[归纳].pdf

    C#多线程同步与异步的实现.pdf

    C#多线程同步与异步的实现.pdf

Global site tag (gtag.js) - Google Analytics