线程同步示例

synchronized 关键字的意思,执行方法的时候,当前对象被锁定

下面的示例要对访问b的所有函数要加synchronized ,否则其他调用者会篡改b的值

public class TT implements Runnable {
    int b = 100;

public synchronized void m1() throws Exception{
        //Thread.sleep(2000);
        b = 1000;
        Thread.sleep(5000);
        System.out.println("b = " + b);
    }

public synchronized void m2() throws Exception {
         Thread.sleep(2500);
         b = 2000;
    }

public void run() {
        try {
            m1();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

public static void main(String[] args) throws Exception {
        TT tt = new TT();
        Thread t = new Thread(tt);
        t.start();
        tt.m2();
        System.out.println(tt.b);
    }
}

时间: 2024-11-05 18:51:24

线程同步示例的相关文章

windows C++ 互相等待线程同步示例

windows C++ 互相等待线程同步示例 开发中遇到线程同步问题,可抽象为如下模型: 1.主线程的继续执行的前提是子线程的变量已经初始化完毕. 2.子线程待主线程执行完毕后继续执行后续的初始化操作. 重复1,2执行--直到通信结束. 如下图所示: 源码(VS2010编译.运行通过) #include "stdafx.h" #include <iostream> using namespace std; #include <windows.h> const c

同步-同步锁-死锁-线程交互-线程综合示例

一.同步 1.作用:为了避免多个线程同时访问并修改共享数据所导致的不安全问题. 2.使用synchronized(对象){}方式. 二.机制 1.当线程要进入某个被"同步锁"锁住代码之前,线程必须先获得"同步锁对象" 2.保证任何时刻,只有一条线程能执行被锁代码 3.不许以"竞争资源"作为"同步对象" 三.同步锁的释放 1.代码完成 2.语句块抛出异常 3.语句块遇到break,return 4.调用wait方法 5.注意:s

iOS多线程编程:线程同步总结 NSCondtion

1:原子操作 - OSAtomic系列函数 iOS平台下的原子操作函数都以OSAtomic开头,使用时需要包含头文件<libkern/OSBase.h>.不同线程如果通过原子操作函数对同一变量进行操作,可以保证一个线程的操作不会影响到其他线程内对此变量的操作,因为这些操作都是原子式的.因为原子操作只能对内置类型进行操作,所以原子操作能够同步的线程只能位于同一个进程的地址空间内. 2:锁 - NSLock系列对象 iOS平台下的锁对象为NSLock对象,进入锁通过调用lock函数,解锁调用unl

多线程——线程同步,死锁

线程同步: 为什么需要同步 ①   线程同步是为了防止多个线程访问一个数据对象时,对数据造成破坏. ②   线程的同步是保证多线程安全访问竞争资源的一种手段. 同步和锁 ①   Java中每一个对象都有一个内置锁. ②   当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁:当程序运行到synchronized同步代码块时,自动获得锁定对象的锁. ③   获得一个对象的锁也称为获取锁.锁定对象.在对象上锁定或在对象上同步.当程序运

Java 线程同步

Java 线程同步根本上是要符合一个逻辑:加锁------>修改------>释放锁 1.同步代码块 示例如下: public class SyncBlock { static class DataWrap { int i; } static class SyncBlockThread extends Thread { private DataWrap date; public SyncBlockThread(DataWrap dataWrap) { this.date = dataWrap;

C#编程总结(三)线程同步

C#编程总结(三)线程同步 在应用程序中使用多个线程的一个好处是每个线程都可以异步执行.对于 Windows 应用程序,耗时的任务可以在后台执行,而使应用程序窗口和控件保持响应.对于服务器应用程序,多线程处理提供了用不同线程处理每个传入请求的能力.否则,在完全满足前一个请求之前,将无法处理每个新请求.然而,线程的异步特性意味着必须协调对资源(如文件句柄.网络连接和内存)的访问.否则,两个或更多的线程可能在同一时间访问相同的资源,而每个线程都不知道其他线程的操作. "如果觉得有用,请帮顶! 如果有

线程同步--线程间通信

一.线程同步 线程的同步方法跟其他系统下类似,我们可以用原子操作,可以用 mutex,lock 等. iOS 的原子操作函数是以 OSAtomic 开头的,比如:OSAtomicAdd32, OSAtomicOr32 等等.这些函数可以直接使用,因为它 们是原子操作. iOS 中的 mutex 对应的是 NSLock,它遵循 NSLooking 协议,我们可以使用 lock, tryLock, lockBeforeData:来加锁,用 unLock 来解锁.使用示例: BOOL moreToDo

Java 同步示例

同步 1)同步方法 2)同步块 21) 实例变量 22) 类变量 锁定的内容 1)锁定类的某个特定实例 2)锁定类对象(类的所有实例) 一.同步类实例:同步方法 public class Demo { public synchronized void m1(){ //............... } public void m2(){ //............ synchronized(this){ //......... } //........ } } 这两种写法的效果是一样的,锁定的

C#多线程:深入了解线程同步lock,Monitor,Mutex,同步事件和等待句柄(中)

本篇继续介绍WaitHandler类及其子类 Mutex,ManualResetEvent,AutoResetEvent的用法..NET中线程同步的方式多的让人看了眼花缭乱,究竟该怎么去理解呢?其实,我们抛开.NET环境看线程同步,无非是执行两种操作:一是互斥/加锁,目的是保证临界区代码操作的"原子性":另一种是信号灯操作,目的是保证多个线程按照一定顺序执行,如生产者线程要先于消费者线程执行..NET中线程同步的类无非是对这两种方式的封装,目的归根结底都可以归结为实现互斥/ 加锁或者是