Thread和Runnable-程序员宅基地

技术标签: jvm  java基础  

两者都创建线程的方式,不同之处在于前者是类,后者是接口。使用的时候重写他们即可。

预热:操作系统的知识

想象此时有一条马路,走的人多了道路开始变得堵塞,如果拓宽为多车道即可解决该问题。

这便是多线程的例子。进程与线程是老生常谈的话题,进程是静态的程序运行时的过程,而一个进程可以包含若干个线程,最少的情况就是只有一个主线程。在java中还会有一个gc线程用于回收资源。

线程是cpu调度和执行的基本单位,而很多多线程是模拟出来的,并不是真正的多线程,只是切换的足够快,产生了多线程的错觉。

Thread方法:继承Thread类

流程如下:

  1. 写一个类继承Thread类;
  2. 重写run方法
  3. 最后new一个它的对象,并使用这个对象调用start方法开启线程。

而我们要运行的内容就放在run方法内。

public class TestThread1 extends Thread {

    //重写Thread类的run方法,将要执行在线程中的任务放入其中
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("reading..."+i);
        }
    }

    public static void main(String[] args) {
        //创建一个TestThread1对象的示例
        TestThread1 testThread1 = new TestThread1();
        //调用start方法开启线程
        testThread1.start();
        //如果我们调用的是run方法,就会先执行testThread1的内容,再执行主线程的
        //这样就违背了我们要做多线程的想法

        for (int i = 0; i < 2000; i++) {
            System.out.println("studying..."+i);
        }
    }
}

如果直接调用run方法,相当于只有主线程在运行,而调用start方法时会开辟一个新的子线程去执行内部的run方法。

Runnable方法:实现Runnable接口

流程如下:

  1. 创建一个类实现Runnable接口;
  2. 重写run方法;
  3. 创建一个线程对象,将我们创建的类放入其中,执行start方法以启动线程。
public class TestThread2 implements Runnable {

    //重写Runnable接口的run方法,将要执行在线程中的任务放入其中
    @Override
    public void run() {
        for (int i = 0; i < 20; i++) {
            System.out.println("reading..."+i);
        }
    }

    public static void main(String[] args) {
        //创建一个TestThread2对象的示例
        TestThread2 testThread2 = new TestThread2();
        //new一个线程对象,传入Runnable示例并调用start方法执行
        new Thread(testThread2).start();

        for (int i = 0; i < 2000; i++) {
            System.out.println("studying..."+i);
        }
    }
}

两者关系 

Thread类同样也实现了Runnable接口。通过上面的例子可知,当我们使用Runnable方法创建线程时,同样需要使用Thread来执行。前人总结如下:

无论使用两种方法的哪一种,都会new Thread,然后执行我们重写的run方法。

用法上,如果有复杂的线程操作,就继承Thread;如果只是简单的执行一个任务,就实现runnable。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44016573/article/details/137645524

智能推荐

命令行 降低IE版本 IE11降到IE8_win7自带ie11降级ie8命令-程序员宅基地

文章浏览阅读2w次,点赞2次,收藏9次。将下面的命令复制,然后在命令行输入框中粘贴,最后按下回 车键。 FORFILES /P %WINDIR%\servicing\Packages /M Microsoft-Windows-InternetExplorer-*11.*.mum /c "cmd /c echo Uninstalling package @fname && start /w pkgmgr /up:@fname /q_win7自带ie11降级ie8命令

Web前端与可视化有什么区别?_用python制作可视化面板和web前端制作有什么区别-程序员宅基地

文章浏览阅读1.1k次。首先是技术栈的不同。Web 开发主要以 HTML 来描述结构,以 CSS 来描述表现,以JavaScript 来描述行为。而可视化则较少涉及 HTML 和 CSS,它更多地要同浏览器的Canvas、SVG、WebGL 等其他图形 API 打交道。这是因为,Web 开发以呈现块状内容为主,所以 HTML 是更合适的技术。而可视化开发因为需要呈现各种各样的形状、结构,所以,形状更丰富的 SVG 以及更底层的 Canvas2D 和 WebGL 就是更合适的技术了。其次,Web 开发着重于处理普通的文..._用python制作可视化面板和web前端制作有什么区别

linux系统插入U盘,全部上锁,显示为只读文件_uosu盘文件有锁-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏4次。今天因为需要往U盘里面拷贝一些资料,然后本来以为拷贝完了,就直接把U盘拿下来了,然后发现提示文件拷贝失败,原来文件还没有拷贝好。 只好把U盘插上重新拷贝,然后就发现所有的文件都变成了只读文件,不能拷贝和删除U盘中的内容,然后我将文件权限改了,但是提示失败,,,,很绝望。在终端直接拷贝也不行。下面说解决办法:首先将U盘安全移除,然后重新插入,我的问题就解决了。。。。啊哈哈哈..._uosu盘文件有锁

MFC实现局域网通信(附完整源码)_mfc网络通信-程序员宅基地

文章浏览阅读423次,点赞8次,收藏11次。MFC实现局域网通信(附完整源码)_mfc网络通信

EasyPlayer:RTSP、RTMP、HLS视频播放器显示模式设置之全屏、广角切换的方案_easyplayer rtsp如何使画面最大化-程序员宅基地

文章浏览阅读1.3k次。需求背景一般对于一个播放器,应该支持如下几种显示模式:等比例,最大化区域显示,不裁剪等比例,最大区域显示,裁剪拉伸显示,铺满全屏要实现这几种显示模式。其实只要对播放控件的布局进行些许调整即可。那EasyPlayer是怎么实现的呢?解决方案EasyPlayer是使用一个PlayFragment进行视频播放,该类实现了一个setScaleType的方法来进行显示模式设定(或切换)。..._easyplayer rtsp如何使画面最大化

展讯平台手机camera驱动移植_2_展讯resource_cost-程序员宅基地

文章浏览阅读3.6k次,点赞3次,收藏5次。在之前的文章里我们讲到了展讯平台camera驱动移植的简单介绍。然而在安卓q开始,展讯camera这一块的目录结构都进行了较大的改变。在这里我们主要讲一下安卓q的camera驱动移植。此处仅陈述点亮,OTP、AF、FLASH等等暂未配置。_展讯resource_cost

随便推点

xml文件基本格式与解析(一)_xml格式-程序员宅基地

文章浏览阅读5.8w次,点赞20次,收藏104次。什么是xml文件格式_xml格式

百度地图bd09II坐标转换天地图CGCS2000坐标_百度地图转天地图经纬度-程序员宅基地

文章浏览阅读1.6k次,点赞4次,收藏2次。【代码】百度地图bd09II坐标转换天地图CGCS2000坐标。_百度地图转天地图经纬度

Win10的Linux子系统Ubuntu安装图形界面-程序员宅基地

文章浏览阅读4.9k次,点赞9次,收藏43次。Win10的Linux子系统Ubuntu安装图形界面陈拓 2021/07/25-2021/07/261. 概述Win10的linux子系统Windows Subsystem for Linux(简称 WSL)之Ubuntu安装见文章:《Win10启用Linux子系统安装Ubuntu》https://zhuanlan.zhihu.com/p/341394468https://blog.csdn.net/chentuo2000/article/details/112131624W

SSH修改登录端口并配置免密登录(非root)_ssh ip默认为非root如何调-程序员宅基地

文章浏览阅读2.4k次。实验环境本地 MacOS 10.14.4远程服务器CentOS 7.5 64位Firewalld本地命令前缀 [admin@MacBookPro]$服务器命令前缀 [A@CentOS]$​ 最近在建站后,发现不到2天我的小破站就有600次ssh远程登录的尝试。心中不免一阵寒意,为了解决这个问题特地读取了ssh官方的文档,对网站的ssh登录进行了一些措施。​ 首先要了解 SSH免密登录的原理,免密登录需要使用 ssh 的非对称加密方式,登录无需密码,但是需要携带秘钥。本地若想登录._ssh ip默认为非root如何调

oracle电子书百度云盘,ypzdnoracle-e7-bb-8f-e5-85-b8-e6-95-99-e7-a8-8b.pdf-程序员宅基地

文章浏览阅读323次。ypzdnoracle-e7-bb-8f-e5-85-b8-e6-95-99-e7-a8-8b.pdf-e6-98-af-e7-99-be-e5-ba-a6-e7-bd-91-e7-9b-98-e5-ad-98-e5-82-a8-e5-86-85-e5-ae-b9-3cbr-2f-3eoracle-e7-bb-8f-e5-85-b8-e6-95-99-e7-a8-8b.pdf-e7-9a-84-e..._%e5%9b%bd%e7%8e%8b%e6%b8%b8%e6%88%8f%e5%a6%88%e5%a6%88

Cheering Gym-101522C_cheering lsc pcms-程序员宅基地

文章浏览阅读145次。Cheering Gym-101522C_cheering lsc pcms

推荐文章

热门文章

相关标签