第五周作业(java多线程创建的三个方法)

     2022-05-06     782

关键词:

   我最近在学习Java中多线程,并且觉得多线程这块在以后的Java开发中显得极为重要,就谈一下Java实现多线程的三种方式。

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有第三种是带返回值的,这种方式一般要求比较高,并且较前两种难一些。

1、继承Thread类实现多线程
继承Thread类的本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,通过调用start()方法执行线程。

eg:

public class MyThread extends Thread {  

public void run() {  

   System.out.println("MyThread.run()");  

  }  

MyThread myThread1 = new MyThread();  

MyThread myThread2 = new MyThread();  

myThread1.start();  

myThread2.start();

}  

2、实现Runnable接口方式实现多线程
如果自己的类已经extends另一个类,就无法直接extends Thread,此时,必须实现一个Runnable接口。

示例代码:

public class MyThread extends OtherClass implements Runnable {  

public void run() {  

   System.out.println("MyThread.run()");  

  }  

}

 

public class Main{

public static void main(String[] args){

MyThread myThread = new MyThread();  

Thread thread = new Thread(myThread);  

thread.start();  

}

3、使用ExecutorService、Callable、Future实现有返回结果的多线程
ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591 ,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返回结果的多线程了。

 

     由于三种方式都可以用于创建多线程,并且三种方式实现原理中前两种方式本质相同,就我个人而言,我推荐第二种方式,通过实现Runnable接口实现多线程,不推荐使用第一种,就Java的特点来说,不支持多继承,要是几成Thread类来实现多想成就不能让该类在几成其他的类,通过第二种方法更能体现Java面向对象的特征,并且JVM底层Thread累也是实现Runnable接口来实现的,第三种方式由于比较难,一般不会要求太过掌握,但当生产环境需要时,我们就要乐趣学习了。

        

使用checkstyle进行代码审查——第五周作业

mkpad使用CheckStyle进行代码审查  之前写代码一般就主要关注运行的结果,对于代码编写的规范性并没有太在意,甚至有时候还自认为自己的代码还是挺复合标准的,但是最近接触到一款用于代码审查的静态测试工具——C... 查看详情

杨玲201771010133《面向对象程序设计(java)》第五周学习总结

《面向对象程序设计(java)》第五周学习总结第一部分:课程准备部分第二部分:理论知识学习部分 第四章:对象与类 4.1:类与对象的概念。 类:是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例... 查看详情

第五周(代码片段)

这个作业属于哪个课程C语言程序设计II这个作业要求在哪里https://edu.cnblogs.com/campus/zswxy/computer-scienceclass4-2018/homework/2826我在这个课程的目标是掌握高级程序设计语言的知识,更重要的是在实践中掌握程序设计的思想和方法,培养... 查看详情

创新案例分析——第五周作业

软件分析微信微信是腾讯于2011年1月21日[1]推出的一款支持Android以及iOS操作系统的即时通信软件,其面对智能手机用户。用户可以通过客户端与好友分享文字、图片以及贴图,并支持分组聊天和语音、视频对讲功能、广播(一对... 查看详情

第五周——线程

 一、线程的概述1.进程:正在运行的程序称之为一个进程,进程负责了这个程序的内存空间分配,代表了内存中的执行区域。问题:windows号称是多任务的操作系统,那么windows是同时运行多个应用程序吗?从宏观的角度:windo... 查看详情

oo第二次课程总结

OO第五、六、七次作业总结一、第五次作业(一)多线程的协同和同步控制在第五次作业中首次采用了多线程的设计模式。多线程的设计使得对象的设计更具有独立的特性,但是在不同对象之间的交互也需要格外的注意。在此次... 查看详情

第五周作业

    第五周作业1、显示当前系统上root、fedora或user1用户的默认shell;    grep"^root"/etc/passwd|awk-F‘:‘‘{print$7}‘2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); &nbs 查看详情

第五周作业

第五周作业1、显示当前系统上root、fedora或user1用户的默认shell;[[email protected] ~]#  grep -E ‘^(root|fedora|user1)>‘ /etc/passwd | cut -d: -f1,7root:/bin/bashfe 查看详情

第五周作业(代码片段)

2017-2018-220179212《网络攻防技术》第五周作业数据库评估HexorBase图形化的密码破解与连接工具,支持MySQL、Oracle、PostgreSQL、SQLite和SQLServer五大主流数据库。它允许安全人员指定用户字典和密码字典,然后实施字典攻击。同时,它... 查看详情

steam游戏平台的创新(第五周课后作业)

作为一个重度Steamer,很乐意对这款"理财软件"谈一谈自己的想法。虽然和好多大佬相比,我还是萌新,可是看着库中那两百多款还没怎么玩过的游戏不禁陷入沉思,最后得出一个结论-------我花钱买的游戏,为什么还要花时间去... 查看详情

网络攻防第五周作业(代码片段)

1.Web应用程序安全攻防Web应用体系结构包括浏览器、web服务器、web应用程序数据库、传输协议。Web应用安全威胁和攻击类型:针对浏览器和终端用户的Web浏览安全威胁;系统层安全威胁;Web服务器软件安全威胁;Web应用程序安全... 查看详情

第五周作业1

PSP扇形图进度条折线图代码行数 博文字数  查看详情

第五周作业

本周作业内容:1、显示当前系统上root、fedora或user1用户的默认shell; 答:[[email protected] ~]# cat /etc/passwd|egrep ‘^(root|fedora|user1)‘root:x:0:0:root:/root:/bin/bash[[email protected]&n 查看详情

第五周作业

本周作业内容:显示当前系统上root、fedora或user1用户的默认shell;#egrep"^(root|user1|fedora)"/etc/passwd|cut-d:-f7 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();#egrep"^[[:alpha:]]+()"/etc/rc.d/init.d/fun 查看详情

第五周作业

课后习题:==========课外实践作业P467----------1SEEDSQL注入实验代码注入是针对Web应用程序的主流攻击技术之一,通过利用Web应用程序的输入验证不完善漏洞,使得Web应用程序执行由攻击者所注入的恶意指令和代码,造成敏感信息泄... 查看详情

第五周作业

1、显示当前系统上root、fedora或user1用户的默认shell;# grep "^(root|fedora|user1)" /etc/passwd2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello();# grep "[[:alpha:]].*()" /etc/ 查看详情

第五周作业

本周作业内容: 1、显示当前系统上root、fedora或user1用户的默认shell; 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); 3、使用echo命令输出一个绝对路径,使用grep取出其基名;  ... 查看详情

第五周:作业内容

显示当前系统上root、fedora或user1用户的默认shell;[[email protected] /]# grep -E"^root>|^fedora>|^user1>" /etc/passwdroot:x:0:0:root:/root:/bin/bashfedora:x:1022:1024::/home/fedo 查看详情