题目的意思是这样的:让两个线程A和B将自己的ID轮番写入一个文件中,每个线程重复十次写入后执行一个回调函数,说“I'm OK”,就这样。我是一名QA,不是开发,出于兴趣报考了公司的C#课程考试,多线程那些知识我也认真听过课,但是总归没有机会实际运用过,所以一到真正要动手写的时候也就基本等于不会了,最后我想了半天写了这样的一个程序,我感觉也算是符合了题的要求,还望各路大神不吝赐教,我好学习。也多帮我想想办法,应该怎么学习C#,包括反射,匿名方法和Lambda,委托,多线程,数据验证,等等这些知识的实际应用,给我出一些例题,谢谢啦!十分感谢。

以下是我的程序:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
using System.IO; namespace BLevelProgram
{
class BLevelProgram
{
public BLevelProgram()
{
//Constructor
} //静态标识符——记录写入次数.
static int i = ;
static int o = ;
//权利标识符——判断线程是否具有写入权利,默认为true,true为线程1的写入权利,false为线程2的写入权利.
static bool flag = true; public static void Main()
{
//创建文件夹路径.
Directory.CreateDirectory(@"C:\tylan");
Thread.Sleep();
//创建输出文件并关闭.
File.Create(@"C:\tylan\File.txt").Close();
//后台线程a,b轮流向文件交替写入数据.
Thread a = new Thread(kick1);
a.IsBackground = true;
Thread b = new Thread(kick2);
b.IsBackground = true;
a.Start();
b.Start();
//让主线程等待后台线程.
Thread.Sleep();
Console.ReadLine();
} //向文件中写入当前thread的ID.
public static void kick1()
{
for (int c = ; c <= ; c++)
{
//判断线程是否具有写入权利.
while (flag == false)
{
//没有权利的时候就继续等待.
Thread.Sleep();
}
//小于10次写入则继续写入.
if (i < )
{
//输出采取追加模式.
StreamWriter file = new StreamWriter(@"C:\tylan\File.txt", true);
//写一行到文件中.
file.WriteLine(Thread.CurrentThread.ManagedThreadId);
//控制台显示结果.
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
//关闭文件.
file.Close();
//线程a写入次数加一.
i++;
//把写入权利交给线程b.
flag = false;
}
//等于10次就回调.
else
{
//执行线程回调函数.
ThreadCallBack();
}
}
} //向文件中写入当前thread的ID.
public static void kick2()
{
for (int c = ; c <= ; c++)
{
//判断线程是否具有写入权利
while (flag == true)
{
//没有权利的时候就继续等待.
Thread.Sleep();
}
//小于10次写入则继续写入.
if (o < )
{
//输出采取追加模式.
StreamWriter file = new StreamWriter(@"C:\tylan\File.txt", true);
//写一行到文件中.
file.WriteLine(Thread.CurrentThread.ManagedThreadId);
//控制台显示结果.
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
//关闭文件.
file.Close();
//线程b的写入次数加一.
o++;
//把写入权利交给线程a.
flag = true;
}
//等于10次就回调.
else
{
//执行线程回调函数.
ThreadCallBack();
}
}
} //线程回调函数
public static void ThreadCallBack()
{
//在函数中输出"I'm OK.".
Console.WriteLine("I'm OK.");
}
}
}

执行后的结果在控制台输出是:

文件中的输出结果为:

C#中一道关于多线程的编程题的更多相关文章

  1. C#中一道关于员工信息系统的题(主要考察LinQ和正则表达式验证)

    今天上午进行了公司的C# C level考核,最后一道编程题是关于员工信息系统的,题目的要求大概是这样的:1.要可以保存员工信息(XXXXX),并且要用正则表达式对输入信息进行验证:2.要可以对员工信 ...

  2. C#中一道关于多线程的基础练习题——模拟仓库存销过程

    题目:模拟生产.入库.销售(50分) 假设某企业自产.自存.自销,需要将工厂生产的各类产品不定时的运到仓库,与此同时,需要将仓库中的货物运往超市和商场中进行销售,请编写一个程序模拟此过程(主要是存取这 ...

  3. 一道有趣的javascript编程题

    题目:实现以下功能 1. 点击按钮“打开新窗口”,打开新的子页面,要求新窗口的大小为400px X 200px 2. 输入地址信息,点击“确定”按钮,关闭该页面 3. 将子页面中输入的地址信息,回传到 ...

  4. java多线程编程题之连续打印abc的几种解法

    一道编程题如下: 实例化三个线程,一个线程打印a,一个打印b,一个打印c,三个线程同时执行,要求打印出6个连着的abc 题目分析: 通过题意我们可以得出,本题需要我们使用三个线程,三个线程分别会打印6 ...

  5. 记一次面试过程中的Python编程题

    这几天面试过程中遇到一道Python编程题,题目如下: 面试中遇到一个Python编程问题:一个字符串,将里面的数字取出来,如果第一个数字前面是+,表示整个数字为正数,如果第一个数字前面是-,表示数字 ...

  6. POJ C程序设计进阶 编程题#2:字符串中次数第2多的字母

    编程题#2:字符串中次数第2多的字母 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536k ...

  7. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

  8. 剑指Offer编程题1——二维数组中的查找

    剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...

  9. PTA中如何出Java编程题?

    很多第一次出Java编程题的老师,不知道Java在PTA中是如何处理输入的.写一篇文章供大家参考. 有多种类型输入的编程题: 类型1:固定数量输入 从控制台读入**两个**数,然后将其相加输出. 对于 ...

随机推荐

  1. java线程具体解释

    线程与进程的差别 (1)程序是一段静态的代码,进程是程序的一次动态执行过程.它是操作系统资源调度的基本单位.线程是比进程更小的执行单位.一个进程在其执行过程中,能够产生多个线程.所以又称线程为&quo ...

  2. linux 系统文件的特殊权限

    文件权限与归属 Linux系统中的一切都是文件,但每个文件的类型不尽相同,并且Linux系统会用不同的符号来加以区分,常见的包括有 -:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设 ...

  3. 开源APP 源码

    作者:wjh2005链接:http://www.zhihu.com/question/28518265/answer/88750562来源:知乎著作权归作者所有,转载请联系作者获得授权. 1. Cod ...

  4. 学习hibernate笔记

    曾经学习java的时候,一開始就学习了hibernate,那时候总认为ssh很高大上,所以就急忙看了下相关视频.只是由于实际须要不高,所以后来一直没有使用上hibernate组件.如今一年过去了,也疯 ...

  5. TP3.2批量上传文件(图片),解决同名冲突问题

    1.html <form action="{:U('Upload/index')}" enctype="multipart/form-data" meth ...

  6. Emacs 的版本控制功能

    All operations: C-x v + vc-update C-x v = vc-diff C-x v D vc-root-diff C-x v I vc-log-incoming C-x v ...

  7. PHP 大数自动转换为科学计数法

    前段时间碰到一个很头疼的问题,就是大于12位的数字在PHP中,会自动转成科学计数法表 示. 比如 1234567891234 显示为 1.23456789123E+12 , 最后只能在计算出大数之后, ...

  8. Spring3 MVC请求参数获取的几种方法[转]

    Spring3 MVC请求参数获取的几种方法 Spring3 MVC请求参数获取的几种方法 一.      通过@PathVariabl获取路径中的参数 @RequestMapping(value=& ...

  9. Jersey框架

    我从别人博客那儿搬点东西过来,原博请看最下面~看的顺序反了..应该先看JAX-RS整体的东西再看具体实现的Jersey例子的= =无数次改这个日记了不能忍...所以决定把JAX-RS系列的文章搬过来. ...

  10. java多线程学习--java.util.concurrent

    CountDownLatch,api 文档:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.h ...