多线程概念与编程

news/2024/7/7 21:36:57

一、多线程的生命周期:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)

1、新建状态:程序初始化一个Thread时,线程处于新建状态

2、就绪状态:线程Thread调用start()方法时,线程进入绪队列,等待调度运行

3、运行状态:线程获取CPU,运行run()或call()

4、堵塞状态:线程失去CPU,被挂起

5、死亡状态:线程正常运行结束或者异常退出,则线程消亡了

     

注意:suspend()resume()stop()这三个方法为废用方法,不推荐使用

 

二、多线程的三种实现方法

1、继承Thread类

public class MyThread extends Thread {@Overridepublic void run() {try {Thread.sleep(1000);System.out.println("我是Thread");} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {MyThread myThread = new MyThread();myThread.start();System.out.println("结束main");}}

2、实现Runnable接口

public class MyRunnable implements Runnable {@Overridepublic void run() {try {Thread.sleep(1000);System.out.println("我是runnable");} catch (InterruptedException e) {e.printStackTrace();}}public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();new Thread(myRunnable).start();System.out.println("结束main");}}

3、实现Callable接口

public class MyCallable implements Callable<Object> {@Overridepublic Object call() throws Exception {Thread.sleep(1000);System.out.println("我是Callabel");return "我是Callabel";}public static void main(String[] args) throws Exception {ExecutorService  pool = Executors.newCachedThreadPool();MyCallable myCallable = new MyCallable();pool.submit(myCallable);    
//        Future<Object> f = pool.submit(myCallable);
//        System.out.println(f.get().toString());    System.out.println("main结束");}
}

注:当用Future去接收call()返回值,该方法是阻塞的,即先打印“我是Callable”再打印“main结束”

 

转载于:https://www.cnblogs.com/chensr/p/8297576.html


http://lihuaxi.xjx100.cn/news/239123.html

相关文章

spring @component的作用

转自&#xff1a;https://www.cnblogs.com/lyjing/p/8427832.html1、controller 控制器&#xff08;注入服务&#xff09; 2、service 服务&#xff08;注入dao&#xff09; 3、repository dao&#xff08;实现dao访问&#xff09; 4、component &#xff08;把普通pojo实例化到…

白盒测试逻辑覆盖c语言代码,白盒测试实例--11逻辑覆盖测试 - aidisheng的专栏 - CSDN博客...

逻辑覆盖测试是通过对程序逻辑结构的遍历实现程序的覆盖。从覆盖源代码的不同程度可以分为以下六个标准&#xff1a;语句覆盖、判定覆盖(又称为分支覆盖)、条件覆盖、判定-条件覆盖(又称为分支-条件覆盖)、条件组合覆盖和路径覆盖。先看一下具体例子的源代码(C语言)&#xff1a…

一天 用户旅程_439天的旅程改变了我的生活

一天 用户旅程by Daniel Lemay丹尼尔勒梅(Daniel Lemay) 439天的旅程改变了我的生活 (The 439 day Journey that Changed my Life) It was Spring of 2017. I was beyond displeased with my current work situation. I dreaded going into work every day and being a punchi…

Android NDK开发之旅29 云服务器Ubuntu下搭建NDK环境,并编译FFmpeg

###前言 因为在Linux环境下编译FFmpeg生成库和头文件下比较方便&#xff0c;所以接下来主要操作在Linux环境下进行。但是对于Android NDK 开发新手来说&#xff0c;自己电脑配置Ubuntu Linux环境过程比较繁琐。而采用云服务器极大的方便了此过程&#xff0c;服务器对客户端远程…

手把手教你搭建一个学习Python好看的 Jupyter 环境

又到摆脱重复工作&#xff0c;换个心情&#xff0c;然而并没有软用的时间了。这次&#xff0c;教大家如何搭建一个好看的jupyter环境。安装Jupyter先来展示一下我的环境python: 3.5.*macos: 10.12.4安装Jupyter的过程只需安装Anaconda即可。测试一下初始设置&#xff1a;jupyte…

github组织存储库使用_为什么我不使用您的GitHub存储库

github组织存储库使用by Sam Westreich, PhD由Sam Westreich博士 为什么我不使用您的GitHub存储库 (Why I’m not using your GitHub repository) As a bioinformatician, I reside in an interesting middle ground between developers and end users. My background trainin…

蜜蜂实训平台c语言考试答案,北理c语言上机答案(全)

小蜜蜂的不过,麻烦大家上百度找一下~1 Hello world让我们用C语言向世界问好。 最早的程序基本是这个样子的&#xff1a; 程序一&#xff1a;#include void main() {printf("Hello world.\n"); }程序二&#xff1a;#include int main() {printf("Hello world.\n&…

【云周刊】第146期:史上最大规模人机协同的双11,12位技术大V揭秘背后黑科技...

摘要&#xff1a;史上最大规模人机协同的双11&#xff0c;12位技术大V揭秘背后黑科技&#xff0c;INTERSPEECH 2017系列 | 语音识别之语言模型技术&#xff0c;机器学习初学者必须知道的十大算法&#xff0c;云数据库SQL Server 2016和新技术应用...更多精彩内容&#xff0c;尽…