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)是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位.可以把进程简单的理解 ...
随机推荐
- 日记 进程 ip /端口
查看日记: tail -f log.txt 循环查看 cat info 查看文件 less info 查看文件 head -n 10 /vv/v ...
- Eureka报错: Connect to localhost:8761 timed out
最近整理配置Eureka时, 注册服务后, Eureka服务一直报出如下错误: 如下是我的单台eureka的 application.yml 配置: spring: application: name ...
- 关于sws安全助手企业政府版的停止维护以及无法购买(官方已公开永久可用免费序列号并将软件开源)
sws安全助手企业政府版官方公布的永久可用系列号:XGVPP-NMH47-7TTHJ-W3FW7-8HV2C 安装程序官网下载地址:https://swssoftwareshare.gitee.io/ ...
- shell脚本中set -e作用
最近学习shell脚本想到一个问题,如果脚本中出现了一条异常语句,甚至可以影响整个脚本的使用,那么是否有一旦出现问题就可以及时停止的方法呢?在shell脚本中set命令就可以轻松实现.set命令的-e ...
- CF1187E Tree Painting
思路: 树形dp,首先使用dp计算以1为根的时候的最大分数,同时得到各个子树i的最大分数dp[i].然后利用前面得到的dp数组分别计算以其他每个点作为根的时候的最大分数. 实现: #include & ...
- 【转】转载一篇优质的讲解epoll模型的文章
从事服务端开发,少不了要接触网络编程.Epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,Nginx.Redis.Skynet 和大部分游戏服务器都使用到这一多路复用技术. Epoll ...
- PYTHON 100days学习笔记008-2:模块
目录 Day008_02:模块 1.import语句 1.1from - import 语句 1.2 from - import * 语句 2.深入模块 2.1 __name__属性 2.2 dir( ...
- Javascript性能优化阅读笔记
第一章 加载和执行 大多数浏览器都是用单一进程处理UI界面的刷新和JavaScript的脚本执行,所以同一时间只能做一件事,Javascript执行过程耗时越久,浏览器等待响应的时间就越长. 所以,H ...
- [转帖]NTLM说明
[思路/技术]Windows认证 | 网络认证 来源:https://bbs.ichunqiu.com/thread-53598-1-1.html 圣乱X无心i春秋-核心白帽 发表于 5 ...
- 【Python】【demo实验36】【基础实验】【求3*3矩阵的主对角线之和】
题目: 求一个3*3矩阵主对角线元素之和. 主对角线:从左上多右下的书归为主对角线 副对角线:从左下至右上的数归为副对角线. 我的源码: #!/usr/bin/python # encoding=ut ...