java——多线程—启动线程
继承Thread启动线程
package com.mycom.继承Thread启动线程; /**
*
* 继承Thread类启动线程的步骤
* 1.定义自定义线程类并继承Thread
* 2.重写run方法
* 3.创建自定义线程对象并调用start()方法
*
* 注意:
* 启动完多线程以后所有的线程会争夺CPU的执行权,哪个线程拿到了执行权哪个线程就会执行代码
*/
public class MyThread extends Thread {
/**
* 线程的主体方法,这个方法中应该编写线程需要具体执行的程序代码任务
* 这个方法不能手动调用,当我们调用当前类对象的start方法以后JVM会自动执行这个run启动一个线程
*/
public void run() {
for(;;){
System.out.println("-----------------------------------------------------");
}
}
}
测试:
package com.mycom.继承Thread启动线程; /**
* Author: gay
*/
public class RunMain {
public static void main(String[] args) {
//创建自定义线程对象
MyThread t1=new MyThread();
t1.start();//启动线程
// t1.run();
for(;;){
System.out.println("==================================================");
}
}
}
实现Runable接口启动线程
package com.mycom.实现Runnabl接口启动线程; /**
* 实现Runnable接口启动线程的步骤
* 1.定义自定义线程类
* 2.实现Runnable并实现接口中的run方法
* 3.由于Runnable接口中没有start方法因此必须要借助Thread类启动多线程
*/
public class MyThread implements Runnable { public void run() {
for(;;){
System.out.println("-------------------------------------------------------");
}
}
}
测试:
package com.mycom.实现Runnabl接口启动线程; /**
* Author: gay
*/
public class RunMain {
public static void main(String[] args) {
MyThread t1=new MyThread();
Thread thread=new Thread(t1);//根据一个Runnalbe的子类对象创建一个线程对象
thread.start();//借助Thread类中的start方法启动线程 //使用匿名内部类启动线程
new Thread(new Runnable() {
public void run() {
for(;;){
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
} }
}).start();
//使用lambda表达式启动线程
new Thread(()->{
for(;;){
System.out.println("***********************************************************");
}
}).start(); for(;;){
System.out.println("===========================================");
}
}
}
实现Callable接口启动线程
package com.mycom.使用Callable接口启动线程; import java.util.concurrent.Callable; /**
* 实现Callable可以实现多线程的并发计算
* 在大数据量计算时推荐使用这样的方式来实现
*/
public class MyThread implements Callable<Integer> { private int startNum;
private int stopNum; public MyThread(int startNum, int stopNum) {
this.startNum = startNum;
this.stopNum = stopNum;
} public MyThread() {
} /*
并发计算的方法 这个方法将返回计算的结果
*/
public Integer call() throws Exception {
int sum=0;
for(int i=startNum;i<=stopNum;i++){
sum+=i;
}
return sum;
}
}
测试:
package com.mycom.使用Callable接口启动线程; import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask; /**
* Author: gay
*/
public class RunMain {
public static void main(String[] args) { try {
MyThread myThread=new MyThread(1,50);
FutureTask<Integer> ft=new FutureTask<Integer> (myThread);
Thread thread=new Thread(ft);
thread.start();
System.out.println(ft.get()); MyThread myThread2=new MyThread(51,100);
FutureTask<Integer> ft2=new FutureTask<Integer> (myThread2);
Thread thread2=new Thread(ft2);
thread2.start();
System.out.println(ft.get()+ft2.get()); } catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
每个线程都有自己的线程栈
java——多线程—启动线程的更多相关文章
- java多线程--启动线程
简单理解启动线程的几种方式: 1. 实现Runnable接口创建一个任务, 调用myTask.run()方法来启动它 2, 构建Thread对象, 调用thread.start()方法启动 这里可以看 ...
- Java多线程之线程的启动
Java多线程之线程的启动 一.前言 启动线程的方法有如下两种. 利用Thread 类的子类的实例启动线程 利用Runnable 接口的实现类的实例启动线程 最后再介绍下java.util.concu ...
- Java多线程之线程其他类
Java多线程之线程其他类 实际编码中除了前面讲到的常用的类之外,还有几个其他类也有可能用得到,这里来统一整理一下: 1,Callable接口和Future接口 JDK1.5以后提供了上面这2个接口, ...
- Java多线程之线程的同步
Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同 ...
- Java多线程之线程的控制
Java多线程之线程的控制 线程中的7 种非常重要的状态: 初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...
- Java多线程02(线程安全、线程同步、等待唤醒机制)
Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...
- java多线程与线程间通信
转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...
- Java多线程之线程的生命周期
Java多线程之线程的生命周期 一.前言 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(R ...
- Java多线程| 01 | 线程概述
Java多线程| 01 | 线程概述 线程相关概念 进程与线程 进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位.可以把进程简单的理解 ...
随机推荐
- flask上下管理文相关 - RequestContetxt & AppContext对象
RequestContetxt / AppContext对象 1.flask程序启动时 当flask程序启动时,通过源码可知,首先会创建两个LocalStack对象,二者内部会分别创建Local对象( ...
- 通用 spring cloud 微服务模板
说明文档 功能 1. 基于映射数据库一键生成 spring cloud 微服务 2. 通用 Controller ,无需编写代码即可完成基于数据库的服务 3. 动态多条件 CRUD + 分页 使用说明 ...
- TMS320C6455小介绍
TMS320C6455是TI公司推出的的一款新型高性能单核定点DSP.它是TI公司基于第三代先进VeloviTI VLIW(超长指令字)结构开发出来的新产品,在通信,医疗图像,无线传输方面都可以大有作 ...
- spring 机制 扫描包
控制器示例 扫描包注解代码 @SpringBootApplication(scanBasePackages = {"cn.maxhou.*"}) 引号内为包名,支持*通配符 为什么 ...
- 用户ID与权限
目录 用户ID与权限 文件系统查看 权限ID概览 设置位 黏着位 UMASK chmod与chown 代码附录 chmod title: 用户ID与权限 date: 2019/11/25 21:20: ...
- Bootstrap手风琴悬浮下拉框,直接拷~~~
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- VS2013:error C1069: 无法读取编译器命令行
前一阵搞python和matlab,没用VS 2013,今天打开一个C++程序想跑一跑,突然蹦出这么个错误,然后发现电脑上所有的程序都会这样了. 后来发现是TMP/TEMP环境变量路径有空格的问题,更 ...
- Spring mybatis源码篇章-动态SQL基础语法以及原理
通过阅读源码对实现机制进行了解有利于陶冶情操,承接前文Spring mybatis源码篇章-Mybatis的XML文件加载 前话 前文通过Spring中配置mapperLocations属性来进行对m ...
- Chrome浏览器控制台报 POST http://*** net::ERR_BLOCKED_BY_CLIENT
开发项目广告模块时,遇到前端提交的请求后台拿不到,好像被什么拦截了,查看了过滤器,拦截器都无错误,且请求也到不了拦截器,chrome浏览器报:ERR_BLOCKED_BY_CLIENT错误 搞腾一半天 ...
- numpy数组常用计算
在说numpy库数组的计算之前先来看一下numpy数组形状的知识: 创建一个数组之后,可以用shape来查看其形状,返回一个元组 例如:a = np.array([[1, 2, 3], [4, 5, ...