我不知道你是在一个多线程out该–【ITOO】

我不知道你是在一个多线程out该–【ITOO】

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

  仍向系统负载作出太慢。卡而发愁太?我不知道多线程,你们out该。最近花了大约两三天。多-threaded。通过团队的交流,多线程有更深入的思考。希望可以加入ITOO目里面,优化一下系统性能。


概念

   线程是程序中的一个单一的顺序控制流。进程内一个相对独立,可调度的执行单元件。是系统独立调度和分派CPU的基本单位值执行总的程序的调度单位。

在单个程序中同一时候执行多个线程完毕不同的工作,称为多线程。

  

基础


我不知道你是在一个多线程out该--【ITOO】

   线程须要引入.NET程序集System.Threading;上面写了一个简单线程的状态和状态之间转换须要调用的方法。几个经常使用的属性、方法:

         我不知道你是在一个多线程out该--【ITOO】

   

   我不知道你是在一个多线程out该--【ITOO】

   假设希望看的更加具体,还能够訪问MSDN

实例

    用.Net最基础启多线程的方式,完毕一个求100之内有多少个素数的多线程Demo。比方一个线程求1~10之内的素数个数,还有一个线程求11~20之内的素数个数……然后将结果汇总,输出终于结果。

    

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ThreadMethod
{
    class Program
    {
        static void Main(string[] args)
        {
            //实例化一个数组
            List<int> list = new List<int>();
            //开启一个线程,线程參数就是list.AddRange(GetZhishu(1,10)),返回值也为list.AddRange(GetZhishu(1,10))
            Thread t = new Thread(() =>
            {
                list.AddRange(GetZhishu(1, 10));
            });
            //开启线程T
            t.Start();
        
            Thread t1 = new Thread(() =>
            {
                list.AddRange(GetZhishu(10, 20));
            });      
            t1.Start();

            Thread t2 = new Thread(() =>
            {
                list.AddRange(GetZhishu(20, 30));
            });
            t2.Start();

            Thread t3 = new Thread(() =>
            {
                list.AddRange(GetZhishu(30, 40));
            });
            t3.Start();

            Thread t4 = new Thread(() =>
            {
                list.AddRange(GetZhishu(40, 50));
            });
            t4.Start();

            Thread t5 = new Thread(() =>
            {
                list.AddRange(GetZhishu(50, 60));
            });
            t5.Start();

            Thread t6 = new Thread(() =>
            {
                list.AddRange(GetZhishu(60, 70));
            });
            t6.Start();

            Thread t7 = new Thread(() =>
            {
                list.AddRange(GetZhishu(70, 80));
            });
            t7.Start();

            Thread t8 = new Thread(() =>
            {
                list.AddRange(GetZhishu(80, 90));
            });
            t8.Start();

            Thread t9 = new Thread(() =>
            {
                list.AddRange(GetZhishu(90, 100));
            });
            t9.Start();
            //线程休眠0.1s
            Thread.Sleep(100);
            //循环数组list,并打印
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.Read();
        }

        /// <summary>
        /// 获取质数的方法
        /// </summary>
        /// <param name="start">获取质数范围的起始值</param>
        /// <param name="end">获取质数范围的终止值</param>
        /// <returns>质数的List集合</returns>
        static List<int> GetZhishu(int start, int end)
        {
            int i, j; //定义两个变量i,j
            List<int> list = new List<int>();//实例化int类型的list集合
            //质数除1和本身不能被其它数整除。让每一个数除以它一半曾经的数,假设不能被前半段整除,就肯定不能被后半段整除,把结果加入到list集合里面
            for (i = start; i < end; i++)
            {
                for (j = 2; j <= i / 2; j++)
                {
                    if (i % j == 0)
                        break;
                }
                if (j > i / 2)
                    list.Add(i);
            }
            return list;
        }

    }
}

我不知道你是在一个多线程out该--【ITOO】

    思路就是首先开启10个线程,分为十个不同的数据段。然后每一个线程都通过Lambda式将托付的方法当做參数传入到线程里面。

传入完毕后。线程休眠0.1s,然后通过循环打印输出结果。

写的算法还有点小缺陷。2,3也为质数。没能加到算法里面,还有待改进。


拓展

    Java和.NET的多线程基本类似,只是Java跟.NET线程也有不同的地方。Java种的Fork/Join框架是将一根任务分解成不同的线程来运行,一个线程运行完毕后。还能够帮助其它的线程运行任务。可是在.NET这边更加側重线程的安全性,不同意訪问其它的线程。

    多线程、分布式都体现了一种分治的思想。把复杂问题简单化。大任务分解成小任务。另外线程里面的锁和分布式事务结合起来。

例如说,两个人同一时候取同一张银行卡的钱。多线程能够给该线程加锁,防止其它的线程进入,造成透支。假设进行转账操作,A账户钱降低,B账户钱添加,必须做成事务,保证数据的一致性。

    另外多线程也不一定意味着高效。

线程之间的资源是能够共享的。假设开启的线程过多。就像一个超市的打包的员工,同一时候为2个收银员打包。效率还不错;要是同一时候为200个收银员服务,那跑路的时间就非常奢侈了。

    多线程的适用范围:1.不阻断主线程。实现即时响应,由后台线程完毕即时操作 2.多个线程。完毕同类任务。提高并发性 3.一个任务多个步骤,多线程运行各自任务。


总结

    总以为自己跟大牛的差距非常大,不要以为完了就算了,用行动来证明团队的力量是伟大的。

    

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116877.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm整理代码格式_pycharm代码格式

    pycharm整理代码格式_pycharm代码格式black简介自动的代码格式化工具,兼容pep8,项目地址为:官方给出的简介:BlackistheuncompromisingPythoncodeformatter.Byusingit,youagreetocedecontroloverminutiaeofhand-formatting.Inreturn,Blackgivesyouspeed,determinism,andfreedomfrompycodestylenaggingabo

    2022年8月25日
  • TCP拥塞控制算法的演进

    TCP拥塞控制算法的演进TCP拥塞控制算法的演进TCP协议仅定义框架,也就是发送端和接收端需要遵循的“规则”。TCP协议的实现经过多年的改进,有了多个不同的版本。比较重要的有Tahoe、Reno、NewReno、SACK、Vegas等,有些已经成为了影响广泛的RFC文档,有些则成为了Unix/Linux操作系统的标准选项。以下简要介绍各个实现版本的主要区别和联系。1 早期的TCP实现最早的

    2022年6月24日
  • matlab 求矩阵秩,求Matlab中矩阵的秩和迹 | 学步园[通俗易懂]

    matlab 求矩阵秩,求Matlab中矩阵的秩和迹 | 学步园[通俗易懂]1、Matlab中求矩阵的秩>>a=rand(6)a=0.81470.27850.95720.79220.67870.70600.90580.54690.48540.95950.75770.03180.12700.95750.80030.65570.74310…

    2022年5月7日
  • 编译器指令重排和CPU指令重排_十进制调整指令DA怎么用

    编译器指令重排和CPU指令重排_十进制调整指令DA怎么用这个知识点也是很多人说不清道不明的地方,感觉都知道,说又说不出来。为什么会这样呢?因为这几个字,很容易被当成动词去理解,其实正确的理解是当成名词,即指令重排现象。那什么时候会产生指令重排现象呢?两个阶段:1、编译期;2、运行期。编译期指令重排解释型语言是在运行期间执行编译+运行动作,所以运行效率较编译型语言低。Java既可以作为解释型语言去用,也可以作为编译型语言。但是主流的做法是当成编译型语言在…

    2022年10月8日
  • 用vc2010怎么编译运行C语言,怎么用vc++2010学c语言程序设计?如何像vc6.0一样运行cpp文件?…「建议收藏」

    用vc2010怎么编译运行C语言,怎么用vc++2010学c语言程序设计?如何像vc6.0一样运行cpp文件?…「建议收藏」我简单做了一下,基本实现你要的功能,事件响应代码在下面得到路径之后,然后对文件进行文件内容的读取,读取到一个缓冲区内,然后用setwindowtext函数将内容显示在下面的空间上即可voidctest2dlg::onbutton1(){//todo:addyourcontrolnotificationhandlercodeherecstringstrpath;/…

    2022年8月12日
  • 八电极脂肪秤方案软硬件与APP功能介绍[通俗易懂]

    八电极脂肪秤软硬件端功能说明:  LED显示:    1、3个超白光LED    2、显示数字:188.8.8(两个小数点)    3、显示符号:ble、kg指示符    4、不显示体脂率(由APP端显示)    电源:4.5V的3节干电池    开机:压力开机,上秤重量达到开机压力值(5±2kg)开机    按键:单位键,无实体按键,    称重范围:标称:5-180kg,    分度:0.05kg    小重量刷零:最小锁定重量5kg,5kg以下重

    2022年4月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号