using System
using System.Threading;//namespace ThreadExample
{//
class FileAccess//
{
public void WriteData(string Data)
{//
Monitor.Enter(this);// //Console.WriteLine("文件访问.写入数据--开始");
//Console.WriteLine("文件访问.写入数据--工作");
for(int cnt=0;cnt<10;cnt++)
{
Console.Write(Data);
}
//Console.WriteLine("文件访问.写入数据--结束");
Console.WriteLine(".......................");
Monitor.Exit(this);//释放监视锁
}
}
class ThreadMonitorclass//定义一个其他类
{
public static FileAccess Fd=new FileAccess();//声明一个静态类的对象Fd
public static void ChildThread1()//定义静态方法1将来被委托调用
{
Console.WriteLine("子线程#1开始");
//Console.WriteLine("子线程#1调用.文件访问写入");
Fd.WriteData("T1");
Console.WriteLine("子线程#1--从输出返回");
}
public static void ChildThread2()
{
Console.WriteLine("子线程#2--开始");
//Console.WriteLine("子线程#2--开始调用文件访问写入数据");
Fd.WriteData("T2");
Console.WriteLine("子线程#2--从输出开始返回");
}
public static void Main()
{
ThreadStart Child1=new ThreadStart(ChildThread1);
ThreadStart child2=new ThreadStart(ChildThread2);
//Console.WriteLine("主---创建子线程");
Thread Thread1=new Thread(Child1);
Thread Thread2=new Thread(child2);
Thread1.Start();
Thread2.Start();
Console.ReadLine();
}
}
}
using System.Threading;//namespace ThreadExample
{//
class FileAccess//
{
public void WriteData(string Data)
{//
Monitor.Enter(this);// //Console.WriteLine("文件访问.写入数据--开始");
//Console.WriteLine("文件访问.写入数据--工作");
for(int cnt=0;cnt<10;cnt++)
{
Console.Write(Data);
}
//Console.WriteLine("文件访问.写入数据--结束");
Console.WriteLine(".......................");
Monitor.Exit(this);//释放监视锁
}
}
class ThreadMonitorclass//定义一个其他类
{
public static FileAccess Fd=new FileAccess();//声明一个静态类的对象Fd
public static void ChildThread1()//定义静态方法1将来被委托调用
{
Console.WriteLine("子线程#1开始");
//Console.WriteLine("子线程#1调用.文件访问写入");
Fd.WriteData("T1");
Console.WriteLine("子线程#1--从输出返回");
}
public static void ChildThread2()
{
Console.WriteLine("子线程#2--开始");
//Console.WriteLine("子线程#2--开始调用文件访问写入数据");
Fd.WriteData("T2");
Console.WriteLine("子线程#2--从输出开始返回");
}
public static void Main()
{
ThreadStart Child1=new ThreadStart(ChildThread1);
ThreadStart child2=new ThreadStart(ChildThread2);
//Console.WriteLine("主---创建子线程");
Thread Thread1=new Thread(Child1);
Thread Thread2=new Thread(child2);
Thread1.Start();
Thread2.Start();
Console.ReadLine();
}
}
}
解决方案 »
- checkedListBox1 填充过程出错,请帮助看一下!
- 怎么让richbox的焦点到指定位置
- WebRequest如何判断接连正确?
- c#调试状态下值变化,页面运行无变化,高人指点!
- dataGrid增行问题
- 我想在某个时间段自动重启某个程序,请问脚本怎么写呢?
- 在数据库的temp字段中中放入:Response.Write("您好!");现在C#中读出,如何显示并运行这一行程序?
- 求《用实例学 Crystal Report for Visual Studio.NET》电子书
- 运行程序时,预定义的类型“System.Byte”尚未定义或导入是怎么回事?哪位大侠能帮我?
- 面试中要求找:农业部[柑桔规划]和农计函(2003)59号文件,兄弟们帮帮忙
- 哪里有ERP 或进销存的源代码?渴求学习研究。
- 各位大虾我想实现隔一分中就从sql server数据库里提取数据??怎么实现啊....
。。
Monitor.Exit(this);
段落时,只有一个线程能进入,在结束之前,另外一个线程无法进入还有,象你这样的情形,使用lock(this)比较好,或者你要坚持手写Monitor方法的话,最好使用try/finallyMonitor.Enter(this);
try
{}
finally
{
Monitor.Exit(this);
}