有几个规律: 1、假如一个对象(或变量)不会同时被多个其他线程访问,那么这个对象是不需使用线程同步的。 2、假如虽然有多个线程同时访问一个对象,但他们所访问的数据或方法并不相同(不交叉),那这种情况也不需使用线程同步。 例如上例中的那个公司里面假如有 T 和 Q 两个人,但他们的工资分别是由 A 和 B 主管的,那么这个工资的处理就不需要线程同步了。 3、假如一个对象会同时被多个其他线程访问,一般只需为这个对象添加线程同步的代码,而其他线程是不需添加额外代码的。
public void SendFlower() { Console.WriteLine("正在送花的途中"); for (int i = 0; i < 10; i++) { Thread.Sleep(200); Console.Write(".."); } Console.WriteLine("/r/n花已经送到MM手中了,boss");
public class TestMain { private static AutoResetEvent ent = new AutoResetEvent(false);
public static void Main() { Boy sender = new Boy(ent);
for (int i = 0; i < 3; i++) { Thread th = new Thread(new ThreadStart(sender.SendFlower)); th.Start(); ent.WaitOne(); //等待工作 Console.WriteLine("收到了吧,花是我送嘀:)/r/n/r/n"); }
Console.ReadLine(); }
}
public class Boy { AutoResetEvent ent;
public Boy(AutoResetEvent e) { ent = e; }
public void SendFlower() { Console.WriteLine("正在送花的途中"); for (int i = 0; i < 10; i++) { Thread.Sleep(200); Console.Write(".."); } Console.WriteLine("/r/n花已经送到MM手中了,boss");