多线程和同步 : 如进程、线程同步,可理解为进程或线程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的线程
相关推荐
本实例主要探讨如何在VC++中创建多线程,尤其是工作者线程(Worker Threads)和用户界面(UI)线程,以及如何进行线程同步和异步操作。 首先,我们要理解线程的基本概念。线程是操作系统分配CPU时间的基本单元,一...
在计算机科学中,进程线程通信、线程同步与异步以及进程间的通信是操作系统核心概念,对于理解和优化多任务并行处理至关重要。这些概念在软件开发,尤其是并发编程领域中占据着举足轻重的地位。 首先,让我们来探讨...
在C#编程中,线程同步与异步是并发编程中的关键概念,它们涉及到如何有效地管理多线程环境中的资源和执行顺序。本教程将深入探讨这两个概念,以帮助初学者更好地理解和应用。 同步编程是程序执行的一种方式,其中...
在计算机编程领域,尤其是网络编程中,线程同步与异步套接字编程是至关重要的概念,它们直接影响到程序的性能、稳定性和可扩展性。本文将深入探讨这两个主题,并结合实际应用进行详细阐述。 首先,我们需要理解线程...
在Visual Studio 2008中,创建多线程项目时,可以选择"新建项目"->"Visual C#"->"Windows应用程序",然后在代码中引入`System.Threading`命名空间,即可使用`AutoResetEvent`进行多线程同步和异步操作。 总结,`...
在C++编程中,线程同步和异步套接字编程是两个重要的概念,尤其是在开发高性能、多用户并发的网络应用程序时。线程同步确保了数据的一致性和完整性,而异步套接字则提供了非阻塞的网络通信方式,提高了程序的执行...
在Visual C++ MFC编程中, Lesson16主要讲解了线程同步和异步套接字编程的关键概念和技术。线程同步是多线程编程中一个重要的方面,它确保了在共享资源时避免数据冲突和死锁。异步套接字编程则是Windows环境下网络...
这个过程通常涉及到线程同步和异步的概念。本文将深入探讨线程异步工作以及如何在C++中实现一个线程在结束时异步通知另一个线程,而无需等待。 线程异步工作是指线程之间不直接依赖彼此的执行顺序,它们可以独立地...
线程同步和异步操作在多线程编程中至关重要。同步操作确保线程按照特定顺序执行,防止数据竞争。C#提供了多种同步机制,如`Mutex`、`Semaphore`、`Monitor`(对象锁)、`Lock`关键字以及`WaitHandle`类等。异步操作...
在 Java 编程中,线程同步和异步是一种重要的机制,用于控制多线程环境下的资源访问和数据的一致性问题。下面,我们将通过实例讲解来详细介绍 Java 线程之对象的同步和异步。 一、多线程环境下的同步与异步 在多...
### 并发、多线程、同步异步概念解析 #### 一、并发与多线程 **并发**(Concurrency)是指多个任务看起来同时进行的一种现象。在计算机领域,特别是操作系统层面,它指的是一个时间段内有多个程序或任务都在运行...
线程同步与异步套接字编程 线程同步与异步套接字编程
根据给定的文章信息,本文将深入探讨C#在.NET平台上进行多线程程序设计的方法,特别是多线程同步与异步的实现。 ### C#多线程同步与异步的实现 #### 一、多线程概念 多线程是现代操作系统支持的一种并发处理方式...
2. `SyncTaskExecutor`:这是一个同步执行器,任务在同一线程中执行,不涉及多线程,适合用于同步调用,而非异步执行。 3. `ThreadPoolTaskExecutor`:这是Spring最常用的线程池实现,它包装了`java.util.concurrent...
vc++ 线程同步与异步套接字编程实例,Windows套接字在两种模式下执行I/O操作,阻塞和非阻塞。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回程序(将控制权交还给程序)。而在非...
Delphi提供了各种同步对象,如TCriticalSection、TSemaphore、TMutex等,来实现线程同步。例如,TCriticalSection用于在多线程中保护临界区,确保同一时间只有一个线程能进入该区域。使用TryEnterCriticalSection和...
本文将对C#.NET中的同步和异步SOCKET通讯以及多线程应用进行详细讲解,并结合提供的代码片段进行分析。 首先,我们需要理解同步和异步的概念。在C#.NET中,同步通讯是指客户端和服务器之间的数据传输在同一个线程中...
C#多线程同步与异步的实现[归纳].pdf
C#多线程同步与异步的实现.pdf