继承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——多线程—启动线程的更多相关文章

  1. java多线程--启动线程

    简单理解启动线程的几种方式: 1. 实现Runnable接口创建一个任务, 调用myTask.run()方法来启动它 2, 构建Thread对象, 调用thread.start()方法启动 这里可以看 ...

  2. Java多线程之线程的启动

    Java多线程之线程的启动 一.前言 启动线程的方法有如下两种. 利用Thread 类的子类的实例启动线程 利用Runnable 接口的实现类的实例启动线程 最后再介绍下java.util.concu ...

  3. Java多线程之线程其他类

    Java多线程之线程其他类 实际编码中除了前面讲到的常用的类之外,还有几个其他类也有可能用得到,这里来统一整理一下: 1,Callable接口和Future接口 JDK1.5以后提供了上面这2个接口, ...

  4. Java多线程之线程的同步

    Java多线程之线程的同步 实际开发中我们也经常提到说线程安全问题,那么什么是线程安全问题呢? 线程不安全就是说在多线程编程中出现了错误情况,由于系统的线程调度具有一定的随机性,当使用多个线程来访问同 ...

  5. Java多线程之线程的控制

    Java多线程之线程的控制 线程中的7 种非常重要的状态:  初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...

  6. Java多线程02(线程安全、线程同步、等待唤醒机制)

    Java多线程2(线程安全.线程同步.等待唤醒机制.单例设计模式) 1.线程安全 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运行结果和单线程运行的结果是一样的,而且其他的变量 ...

  7. java多线程与线程间通信

    转自(http://blog.csdn.net/jerrying0203/article/details/45563947) 本文学习并总结java多线程与线程间通信的原理和方法,内容涉及java线程 ...

  8. Java多线程之线程的生命周期

    Java多线程之线程的生命周期 一.前言 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态.在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(R ...

  9. Java多线程| 01 | 线程概述

    Java多线程| 01 | 线程概述 线程相关概念 进程与线程 进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位.可以把进程简单的理解 ...

随机推荐

  1. Ubuntu 14.04安装Python3

    1.添加源 sudo add-apt-repository ppa:fkrull/deadsnakes 2.更新 & 安装 sudo apt-get update sudo apt- pyth ...

  2. 集群架构05·备份服务rsync

    初识 开源,多功能,全量和增量的本地或远程数据同步备份的优秀工具,remote synchronization 俩服务器定/实时备份cron+rsync,数据同步,全网备份 一个rsync相当于scp ...

  3. yso中URLDNS的pop链分析(重新分析整理)

    #发现之前对这个链关注的点有点问题,重新分析了一下 由于最近面试的过程中被问到了yso中URLDNS这个pop链的工作原理,当时面试因为是谈到shiro的怎么检测和怎么攻击时谈到了这个.其实在实战中用 ...

  4. 【转载】恢复误删文件--DOS命令应用实例(一)

    <电脑爱好者>报转载第一辑第二篇之恢复误删文件--DOS命令应用实例(一)                             恢复误删文件--DOS命令应用实例(一) 上期我们讲述了 ...

  5. 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动

    上一章节我们已经实现了从客户端往服务端发送数据并且通过反射方法调用服务端的实现类最后返回给客户端的底层协议. 这一章节我们来实现客户端代理类的注入. 承接上一章,我们实现了多个底层协议,procoto ...

  6. 基于mxgraph.js开发的流程图组件

    1.fabric.js 在决定使用mxgraph.js开发流程图之前,尝试过用fabric.js来开发,结果发现并没有想象中的那么简单,而且用户体验非常差,下面是体验地址:workFlow直到遇到一个 ...

  7. mui ajax传参示例

    //加入购物车var data=[];var row1 = {good_id:'1',number:'2',goods_spec_ids:[1,2]};data.push(row1);console. ...

  8. [转帖]你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下)

    你不曾见过的国产CPU:可能是最全的龙芯系列芯片家谱(下) https://www.ijiwei.com/html/news/newsdetail?source=pc&news_id=7177 ...

  9. 【转帖】龙芯3A3000处理器深度评测:和Intel、AMD差距巨大

    龙芯3A3000处理器深度评测:和Intel.AMD差距巨大 https://www.eefocus.com/mcu-dsp/424623/r0 作者非计算机科班毕业 让我汗颜. 我计算机毕业都不知道 ...

  10. 坦克大战--Java类型

    写在前面       Java编译器下载教程(真的良心):https://blog.csdn.net/Haidaiya/article/details/81230636 本项目为本人独自制作,请各位尊 ...