public class Test
{
public static void Main()
{
BankAccount bk = new BankAccount();
ParameterizedThreadStart paraterThreadStart = new ParameterizedThreadStart(bk.Deposit);
Thread thread = new Thread(paraterThreadStart);
thread.Start(100000000); BankAccount bk2 = new BankAccount();
ParameterizedThreadStart paraterThreadStart2 = new ParameterizedThreadStart(bk2.Deposit);
Thread thread2 = new Thread(paraterThreadStart2);
thread2.Start(1000); //Thread.Sleep(1000);
Console.WriteLine("主线程输出");
Console.ReadLine();
}}
public class BankAccount
{
private int balance;
public int Balance
{
set { balance = value; }
get { return balance; }
}
private object balanceLock = new object();
public void Deposit(object delta)
{
lock (balanceLock)
{
string str="0";
using (StreamReader sr = new StreamReader(@"c:\text.txt", System.Text.Encoding.GetEncoding("GB2312")))
{
str= sr.ReadToEnd();
sr.Close();
}
//Thread.Sleep(int.Parse(delta.ToString()));
for (int i = 0; i < (int)delta; i++)
{ int t = i; }
balance = (int)delta + int.Parse(str);
using (StreamWriter sw = new StreamWriter(@"c:\text.txt", false))
{
sw.Write(balance);
sw.Close();
}
Console.WriteLine("{0}", balance);
Console.ReadLine();
}
}}
当第一线程参数是小于100000000时,线程锁起作用。但当输入200000000时,线程锁不起作用?????郁闷ING
{
public static void Main()
{
BankAccount bk = new BankAccount();
ParameterizedThreadStart paraterThreadStart = new ParameterizedThreadStart(bk.Deposit);
Thread thread = new Thread(paraterThreadStart);
thread.Start(100000000); BankAccount bk2 = new BankAccount();
ParameterizedThreadStart paraterThreadStart2 = new ParameterizedThreadStart(bk2.Deposit);
Thread thread2 = new Thread(paraterThreadStart2);
thread2.Start(1000); //Thread.Sleep(1000);
Console.WriteLine("主线程输出");
Console.ReadLine();
}}
public class BankAccount
{
private int balance;
public int Balance
{
set { balance = value; }
get { return balance; }
}
private object balanceLock = new object();
public void Deposit(object delta)
{
lock (balanceLock)
{
string str="0";
using (StreamReader sr = new StreamReader(@"c:\text.txt", System.Text.Encoding.GetEncoding("GB2312")))
{
str= sr.ReadToEnd();
sr.Close();
}
//Thread.Sleep(int.Parse(delta.ToString()));
for (int i = 0; i < (int)delta; i++)
{ int t = i; }
balance = (int)delta + int.Parse(str);
using (StreamWriter sw = new StreamWriter(@"c:\text.txt", false))
{
sw.Write(balance);
sw.Close();
}
Console.WriteLine("{0}", balance);
Console.ReadLine();
}
}}
当第一线程参数是小于100000000时,线程锁起作用。但当输入200000000时,线程锁不起作用?????郁闷ING
解决方案 »
- C# 给定一个路径字符串,怎样判断是文件还是文件夹?
- 如何在Form2里显示Form1筛选后的ID
- 如何在适配器DataAdapter种自动生成Delete语句
- 想找家公司体验实际的软件开发的生活,大伙给点建议
- C#客户资料管理系统那位高手会呀
- 急!急!急!问一个有关Petshop3.0中强名的问题,已经搞了一个通宵了,请大家帮帮忙.非常感谢!
- 求解: Composite模式的一些设计 和 如何缓存,几时缓存
- 求一SQL语句?在线等待……
- 如何关闭其他程序弹出的错误框?
- DateGrid绑定ComboBox出错(未将对象引用设置到对象的实例)
- [高分提问] C# 写的应用程序 如何和 C# 写的asp.net 网站通信?
- 问一个.net程序的奇怪问题
写成这样.
ParameterizedThreadStart paraterThreadStart2 = new ParameterizedThreadStart(bk.Deposit);
Thread thread2 = new Thread(paraterThreadStart2);
thread2.Start(1000);
把第二个线程也改成对象bk,第二个线程没有执行到,不解????????????