继承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. ulimt 和 sysctl

    ulimit : 对进程进行 资源限制 ,如打开文件数,进程数. sysctl: 更改内核参数. /proc/pid : 伪文件系统,以文件系统的方式 对 访问内核参数 提供接口. 1. ulimit ...

  2. KVM虚拟化介绍(1)

    一.虚拟化分类    1.虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机.在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独 立的空间内运 ...

  3. # 【ARM-Linux开发】在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): 【Linux开发】 --- > 一段时间以来,一直是在Windows上安装虚拟机

    [ARM-Linux开发]在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): [Linux开发] 一段时间以来,一直是在Windows上安装虚拟机,然后安装Ubuntu ...

  4. Spring 控制器层如何调用DAO层

    1.写上注解 @Autowired 2.声明一个变量 private UserDao userDao; 3.注意!Spring里面数据库对象操作类不需要实例化就能调用

  5. SQL查询表的第一条数据和最后一条数据

    方法一: 使用TOP SELECT TOP 1 * FROM user; SELECT TOP 1 * FROM user order by id desc; 方法二: 使用LIMIT SELECT  ...

  6. rqnoj PID95:多多看DVD(加强版)

    题目描述 多多进幼儿园了,今天报名了.只有今晚可以好好放松一下了(以后上了学后会很忙).她的叔叔决定给他买一些动画片DVD晚上看.可是爷爷规定他们只能在一定的时间段L看完.(因为叔叔还要搞NOIP不能 ...

  7. sysconf获取系统参数

    头文件: #include <unistd.h> 原型:long sysconf(int sysnum); 示例: #include <stdio.h> #include &l ...

  8. shell备份脚本

    #!/bin/bash #不存在的变量终止脚本执行 set -o nounset #执行出错终止脚本执行 set -o errexit #递归列出文件的绝对路径并执行压缩 delDir=`date - ...

  9. Centos7 添加开机启动服务

    1.在/usr/lib/systemd/system/下创建服务脚本xxx.service,格式如下: [Unit] Description=Scrapyd After=syslog.target n ...

  10. 剑指offer45:扑克牌顺子

    1 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话, ...