对于线程同步操作最简单的一种方式就是使用 lock 关键字,通过 lock 关键字能保证加锁的线程只有在执行完成后才能执行其他线程。

   lock 的语法形式如下。

   lock(object)
   {
       //临界区代码
   }

  这里 lock 后面通常是一个 Object 类型的值,也可以使用 this 关键字来表示。

  最好是在 lock 中使用私有的非静态成员变量或私有的静态成员变量,即使用 Private 或 Private static 修饰的成员。

  例如:

  private Object obj = new Object();
  lock (obj)
  {
      //临界区代码
  }

【实例】创建控制台应用程序,使用 lock 关键字控制打印奇数和偶数的线程,要求先执行奇数线程,再执行偶数线程。

  根据题目要求,代码如下。

class Program
{
public void PrintEven()
{
lock (this)
{
for(int i = 0; i <= 10; i = i + 2)
{
Console.WriteLine(Thread.CurrentThread.Name + "--" + i);
}
}
}
public void PrintOdd()
{
lock (this)
{
for(int i = 1; i <= 10; i = i + 2)
{
Console.WriteLine(Thread.CurrentThread.Name + "--" + i);
}
}
}
static void Main(string[] args)
{
     //注:这样调用是错误的
     //Thread t1 = new Thread(new ThreadStart(new Program().PrintOdd));
     //Thraed t2 = new Thread(new ThreadStart(new Program().PrintEven));
     //两次new Program类对象,会造成lock的this对象不同,无法锁定。
Program program = new Program();
ThreadStart ts1 = new ThreadStart(program.PrintOdd);
Thread t1 = new Thread(ts1);
t1.Name = "打印奇数的线程";
t1.Start();
ThreadStart ts2 = new ThreadStart(program.PrintEven);
Thread t2 = new Thread(ts2);
t2.Name = "打印偶数的线程";
t2.Start();
}
} http://c.biancheng.net/view/2999.html

线程一(lock)的更多相关文章

  1. 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock

    [源码下载] 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLoc ...

  2. 孤荷凌寒自学python第三十九天python 的线程锁Lock

    孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...

  3. C# 关于线程锁lock的使用方法

    C# 关于线程锁lock的使用方法 原创 2016年09月02日 10:07:05 标签: c# / 线程 / 锁 / lock 11937 在多线程编程中,可能会有许多线程并发的执行一段代码(代码块 ...

  4. 一个线程中lock用法的经典实例

    /* 该实例是一个线程中lock用法的经典实例,使得到的balance不会为负数 同时初始化十个线程,启动十个,但由于加锁,能够启动调用WithDraw方法的可能只能是其中几个 作者:http://h ...

  5. Android多线程研究(9)——线程锁Lock

    在前面我们在解决线程同步问题的时候使用了synchronized关键字,今天我们来看看Java 5.0以后提供的线程锁Lock. Lock接口的实现类提供了比使用synchronized关键字更加灵活 ...

  6. java 线程安全 Lock

    java.util.concurrent.locks 对于线程安全我们前面使用了synchronized关键字,对于线程的协作我们使用Object.wait()和Object.notify().在JD ...

  7. JAVA线程锁lock下Condition的使用

    import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.uti ...

  8. 线程同步 Lock接口

    同步:★★★★★ 好处:解决了线程安全问题. 弊端:相对降低性能,因为判断锁需要消耗资源,产生了死锁. 定义同步是有前提的: 1,必须要有两个或者两个以上的线程,才需要同步. 2,多个线程必须保证使用 ...

  9. C# 线程锁Lock 死锁

    使用lock场景 多线程环境中,不使用lock锁,会形成竞争条件,导致错误. 使用lock 锁 可以保证当有线程操作某个共享资源时,其他线程必须等待直到当前线程完成操作. 即是多线程环境,如果一个线程 ...

  10. 【Java线程】Lock、Condition

    http://www.infoq.com/cn/articles/java-memory-model-5  深入理解Java内存模型(五)——锁 http://www.ibm.com/develope ...

随机推荐

  1. JS-SDK相关参考

    原文: https://www.cnblogs.com/wuhuacong/p/5482848.html https://www.cnblogs.com/29boke/p/5483599.html

  2. Centos7迁移fastdfs文件系统

    系统从一个地方迁移到另一个地方,数据保持不变,但是ip地址和网络情况不一样了,最困难的是要迁移的那个地方还么有互联网,这TM就坑了,所以想到将FastDFS存储的目录整体拷贝过去,这个方法简单粗暴,这 ...

  3. 在线http模拟工具

    在线http模拟工具http://www.atool.org/httptest.php

  4. postgresql 大写问题

    postgresql数据库中,表名和字段名一般用小写.如果某个用了大写,请注意,要用双引号进行标识,否则数据库不会识别.

  5. C++ STL排序问题

    /* stl排序 */ #include <iostream> #include <map> #include <vector> #include <list ...

  6. VS2015 dlib编译 x64 Debug .lib生成

    VS2015 dlib编译 x64 Debug >------ 已启动生成: 项目: ZERO_CHECK, 配置: Debug x64 ------ > Checking Build S ...

  7. 003——angular 组件 以及组件里面的模板

    创建组件: ng g component components/news 一.创建 angualr 组件................................................ ...

  8. 全面系统Python3入门+进阶-1-1 导学

    python特点 结束

  9. Spring MVC初始化

      整个Spring MVC的初始化,配置了DispatcherServlet和ContextLoaderListener,那么它们是如何初始化Spring IoC容器上下文和映射请求上下文的呢?所以 ...

  10. 【Leetcode_easy】844. Backspace String Compare

    problem 844. Backspace String Compare solution1: class Solution { public: bool backspaceCompare(stri ...