线程---1

Posted ccaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程---1相关的知识,希望对你有一定的参考价值。

带着问题去思考!大家好

介绍线程之前,我们先了解下线程管理。

首先,线程管理是操作系统的核心。

为什么要引入线程,什么是线程及进程由什么组成,进程是如何解决问题的?

在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征。为此引入进程,以便更好的描述和控制程序的并发执行,实现操作系统的并发性和共享性

进程间的通信

指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。一般分为三种

1:共享存储:在共享空间进行写/读操作。需要使用同步互斥工具(如P.V操作),共享存储分两种:低级方式的共享是基于数据结构的共享,高级方式则是基于存储区的共享。

2:消息传递:

  直接通信方式:发送进程直接把消息发给接受进程,并将他挂在接收进程的消息缓冲队列上,接受进程从消息缓冲队列中取得消息,

  间接通信方式:发送进程把消息发送到某个中间实体中,接收进程从中间实体中取得消息。

3:管道通信:指用于连接一个读进程和一个写进程实现他们之间通信的一个共享文件。pipe。

 

引入线程呢。是为了减小程序在并发执行时所付出的时空开销。

 

向线程传递参数

技术图片
static void Main(string[] args)
        {
            var samlple = new ThreadSample(10);
            var threadOne = new Thread(samlple.CountNumber);
            threadOne.Name = "ThreadOne";
            threadOne.Start();
            threadOne.Join();

            Console.WriteLine("-----------------------------");
            var threadTwo = new Thread(Count);
            threadTwo.Name = "ThreadTwo";
            threadTwo.Start(8);
            threadTwo.Join();
            Console.WriteLine("-----------------------------");

            var threadThree = new Thread(()=>CountNumber(12));
            threadThree.Name = "threadThree";
            threadThree.Start();
            threadThree.Join();
            Console.WriteLine("-----------------------------");
            int i = 10;
            var threadFour = new Thread(() => PrintNumber(i));
            i = 20;
            var threadFive = new Thread(() => PrintNumber(i));
            threadFour.Start();
            threadFive.Start();
        }
        static void Count(object iterations)
        {
            CountNumber((int)iterations);
        }
        public static void CountNumber(int iterations)
        {
            for (int i = 0; i < iterations; i++)
            {
                Sleep(TimeSpan.FromSeconds(0.5));
                Console.WriteLine($"{CurrentThread.Name} Prints {i}");
            }
        }
        static void PrintNumber(int number)
        {
            Console.WriteLine(number);
        }

        class ThreadSample
        {
            private readonly int _iterations;
            public ThreadSample(int iterations)
            {
                this._iterations = iterations;
            }
            public void CountNumber()
            {
                for (int i = 0; i < _iterations; i++)
                {
                    Sleep(TimeSpan.FromSeconds(0.5));
                    Console.WriteLine($"{CurrentThread.Name} Prints {i}");
                }
            }
        }
View Code

技术图片

 

 线程传参,C#中的线程只接收1个object类型的参数.

线程处理异常

try/catch如果包裹线程,那样是捕获不到的。应该放到线程代码中。

线程优先级

Priority进行赋值,一般分布Highest 。Lowest

 

以上是关于线程---1的主要内容,如果未能解决你的问题,请参考以下文章

多个用户访问同一段代码

JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段

活动到片段方法调用带有进度条的线程

线程学习知识点总结

线程上的Android片段替换(...)

分析定位占用CPU资源高的JVM线程