文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java、C#线程模型分析对比 (转)

2023-06-03 05:16

关注
Java、C#线程模型分析对比 (转)[@more@]

  Java、C#都提供了面向对象的线程模型。它们都抽象出了线程对象,而开发人员在某个类的成员方法中实现线程应用逻辑。通过分离线程对象和线程方法,简化了线程应用逻辑的开发。

在Java中开发线程有两种方法。第一种方法是由Thread派生一个线程类,实现run方法,并调用Thread.start方法启动线程,如:

class MyThread extends Thread { //创建线程类XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

public void run() {…} //线程方法

}

MyThread aThread = new MyThread(); //创建一个线程对象

aThread.start() ; //启动线程

第二种方法是通过实现Runable接口创建一个可执行类,并利用一个Thread对象来启动线程,如:

  class MyRunable implements Runnable{

public void run() {…} //线程方法

}

MyRunable aRunable = new MyRunable(); //创建一个可执行对象

  Thread aThread = new Thread(aRunable);    //创建一个线程对象,并与可执行对象关联

  aThread.start()  ;  //启动线程

C#的线程模型将线程对象和线程方法分离得更彻底,它可将任何一个原型为void( )的公有类成员方法(静态或非静态)用作线程方法;另外线程启动时还指定一个提供线程方法的对象(该对象提供线程应用逻辑所需的各种信息)。下面是一个简单的例子:

using System;

using System.Threading;

public class ThreadWork {  //ThreadWork不显式继承任何类,DoWork可作为线程方法

  public void DoWork() { for(int i = 0; i<10 ;i++) Console.WriteLine("Working thread..."); }   //End of DoWork

}   //End of ThreadWork

class ThreadTest{

  public static void Main() {  //将对象aThread 的DoWork方法作为线程方法执行

ThreadWork aThread = new ThreadWork();

ThreadStart myThreadDelegate = new ThreadStart(aThread.DoWork);  //指定线程方法

Thread myThread = new Thread(myThreadDelegate);  //创建线程对象

myThread.Start();  //启动线程

  }   //End of Main

  }  //End of  ThreadTest

开发人员最关心的是如何实现线程方法。Java线程模型提供两种方法来实现线程方法,重载Runable.run方法或者重载Thread.run方法。开发人员可根据具体的应用场合选择合适的基类(Runable或者Thread),这是Java线程模型的一个优点。另外可以看到,Java线程模型中只能在Runable或Thread的子类中实现线程方法(即子类的run方法),而且每个子类只能实现一个线程方法。C#线程模型由于允许将任何一个原型为void( )的公有类成员方法(静态或非静态)用作线程方法,因此它实际上允许在任何一个类(不要求这个类是某个类的子类)中实现线程方法,而且同一个类中可以实现多个线程方法。面向对象的线程模型有两个要素:线程对象和线程方法。线程对象封装线程本身相关的逻辑,如线程的创建、销毁等等。而线程方法就是线程对象实际执行的任务。利用面向对象线程模型进行多线程开发时,这样来思考问题会更自然:现在我有一项工作(即设计了一个线程方法),找一个工人(线程对象)来完成这个工作吧。所以我们认为C#的线程模型更灵活,而这种灵活性使得开发人员能够将程序结构组织的更加清晰、合理。
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯