 悬赏园豆:20
                [已关闭问题]
                悬赏园豆:20
                [已关闭问题] 
            
                 
         
        
            <P> 以下是自己学习多线程时,给自己出的题,发现两次输出的队列长度不一样,源码如下,请帮忙解决,如有更好的实现办法,请指教,诚谢!</P>
<P>using System;<BR>using System.Collections.Generic;<BR>using System.Text;<BR>using System.Threading;<BR>using System.Collections;</P>
<P>namespace ConsoleApplication1<BR>{<BR>    //多线程将一个队列的数据转移到另一个队列<BR>    class MultiThread8<BR>    {<BR>        static void Main()<BR>        {<BR>            Thread[] threads = new Thread[10];<BR>            MyQueue myQueue = new MyQueue();<BR>            Console.WriteLine("Q1.Count={0}", myQueue.q1.Count);<BR>            Console.WriteLine("开始执行多线程");<BR>            for (int i = 0; i < threads.Length; i++)<BR>            {<BR>                threads[i] = new Thread(myQueue.DoFunc);<BR>                threads[i].Start();<BR>            }</P>
<P>            for (int i = 0; i < threads.Length; i++)<BR>            {<BR>                threads[i].Join();<BR>            }<BR>            Console.WriteLine("Q2.Count={0}", myQueue.q2.Count);<BR>            Console.Read();<BR>        }</P>
<P>    }</P>
<P>    class MyQueue<BR>    {<BR>        public Queue q1 = new Queue();<BR>        public Queue q2 = new Queue();<BR>        public MyQueue()<BR>        {<BR>            for (int i = 0; i < 10000; i++)<BR>            {<BR>                q1.Enqueue(i);<BR>            }<BR>        }</P>
<P>        public void DoFunc()<BR>        {<BR>            lock (this)<BR>            {<BR>                for (int i = 0; i < q1.Count; i++)<BR>                {<BR>                    int t = (int)q1.Dequeue();<BR>                    q2.Enqueue(t);<BR>                    //Console.Write("-{0}", t);<BR>                    Thread.Sleep(10);<BR>                }<BR>                <BR>                Console.WriteLine("-----------");<BR>            }<BR>        }<BR>    }<BR>}</P>
        
        
            
                    
                        问题补充:
                        
Q1是原队列,Q2是目标队列,目的是用多线程的方式把Q1内容复制到Q2中,疑问是,如果Q1的长度是10000或更长,就会出现Q2的结果小于Q1的长度,之前可能没有描述清楚,
如果设置Q1长度为100或更小,就是正常的,希望有达人解释下原因,或者提供些建议,谢谢