创建多个线程的第一种方法

1、定义一个Thread类的子类,比如MyThread类

2、重写Thread的run方法,设置线程任务

3、创建Mythread类的对象

4、调用方法start(),开启新的线程,执行run()方法

Thread的一些常用方法

public String getName():返回该线程的名字
static Thread currentThread(): 静态方法,返回当前的线程//返回的该线程的对象可以调用getName方法,得到当前线程名称
public void setName(String name):设置线程名称,创建的MyThread对象可以调用该方法设置线程名称
public static sleep(long milllis):当前线程暂停执行millis毫秒

MyThread类

public class MyThread extends Thread {
public MyThread(){ }
public MyThread(String name) {// 带参数的构造方法,可以用来设置线程名称
super(name);
} @Override
public void run() {
String name = getName();
System.out.println(name);
}
}

方法的应用

public class Multithreading {
public static void main(String[] args) {
MyThread mt = new MyThread();
// 创建对象
// 调用start方法,开启新线程,执行run方法 //mt.start();//Thread-0
new MyThread().start();
new MyThread().start();
new MyThread().start(); System.out.println(Thread.currentThread().getName());
// 一共有5个线程,其中4个自己创建的线程,1个主线程,由于线程执行的顺序不一定,因此顺序是随机的
/*Thread-0
main
Thread-3
Thread-2
Thread-1*/ mt.setName("绿巨人");
mt.start();
new MyThread("钢铁侠").start(); }
}

sleep方法,可以用来当做计时器

package cn.zhuobo.day12.aboutMultithreading;
// public static void sleep(long millis):使当前正在执行的线程,以毫秒数暂停执行
public class Sleep {
public static void main(String[] args) {
for (int i = 0; i < 60; i++) {
System.out.println(i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {// 实现了每隔1s打印一个数字,因为当前的main线程每打印一个数字就会被sleep方法暂停1000ms
e.printStackTrace();
}
}
}
}

创建多个线程的第二种方法

java.lang.Runable

声明实现Runable接口的类, 该类然后实现run方法,然后new一个该类的实例,作为创建Thread对象的参数,并且启动该线程

1、创建一个Runable接口的实现类
2、在实现类中重写Runable接口的run方法
3、创建一个Runable实现类的对象
4、创建一个Thread对象,并在构造方法中传递第3步的实现类对象
5、Thread对象调用start方法,开启新线程,执行run方法

Runablle接口的实现类

package cn.zhuobo.day12.aboutMultithreading;

public class RunableImpl implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + "-->" + i);
}
}
}

开启新的线程

package cn.zhuobo.day12.aboutMultithreading;

public class RunableDemo {
public static void main(String[] args) {
RunableImpl run = new RunableImpl();// 创建Runable实现类的对象
Thread t = new Thread(run);// 创建Thread对象,并使用Runable实现类的对象作为参数
t.start();// Thread对象调用start方法,执行run方法,开启新线程 for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName());// main线程
}
}
}

多线程Thread类的方法的更多相关文章

  1. 2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

    package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class Tem ...

  2. 探Java多线程Thread类和Runnable接口之间的联系

    首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情 ...

  3. 多线程----Thread类,Runnable接口,线程池,Callable接口,线程安全

    1概念 1.1进程 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 任务管理器中: 1.2线程 线程是进程中的一个执行单元 ...

  4. 多线程——Thread类

    进程(Process):“正在执行的程序”,程序进入内存运行就变成了一个进程.一个进程会产生多个线程. 多线程(Multithread):一个进程中同时存在几个执行体.单线程是按照函数的顺序执行,多线 ...

  5. Java多线程Thread类了解和使用

    创建线程的两种方式 extends Thread 类 public class WelComeApp { public static void main(String[] args) { Welcom ...

  6. 并发编程之 Thread 类过期方法和常用方法

    前言 在 Java 刚诞生时,Thread 类就已经有了很多方法,但这些方法由于一些原因(有一些明显的bug或者设计不合理)有些已经废弃了,但是他们的方法名却是非常的好,真的是浪费.我们在进行并发必编 ...

  7. 多线程-----Thread类与Runnable接口的区别

    第一个继承Thread类来实现多线程,其实是相当于拿出三件事即三个卖早餐10份的任务分别分给三个窗口,他们各做各的事各卖各的早餐各完成各的任务,因为MyThread继承Thread类,所以在newMy ...

  8. Java多线程学习笔记(一)——Thread类中方法介绍

    currentThread():返回代码正在被哪个线程调用. public class CurrentThreadWay { public static void main(String[] args ...

  9. Java多线程系列二——Thread类的方法

    Thread实现Runnable接口并实现了大量实用的方法 public static native void yield(); 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机 ...

随机推荐

  1. neutron相关知识

    Neutron 对虚拟三层网络的实现是通过其 L3 Agent (neutron-l3-agent).该 Agent 利用 Linux IP 栈.route 和 iptables 来实现内网内不同网络 ...

  2. HDU6341 Let Sudoku Rotate (杭电多校4J)

    给一个由4*4个4*4的小格组成数独,这些数独是由一个块逆时针旋转得来的,所以要还原的话就模拟出顺时针的过程,先把里面的字母转化成数字,然后从第一个块开始枚举,每个dfs和之前枚举的已经满足条件的块, ...

  3. spring boot 连接mysql mongodb with jpa

    https://github.com/bigben0123/gs-accessing-data-mysql-mongo-jpa

  4. [BJOI2017]开车

    [BJOI2017]开车 直接做要用栈 修改?难以直接维护 统计边的贡献! len*abs(pre)pre表示前缀car-stop 修改时候,整个区间的pre+1或者-1 分块,块内对pre排序并打标 ...

  5. A1004. Counting Leaves

    A family hierarchy is usually presented by a pedigree tree. Your job is to count those family member ...

  6. 【模板】2-SAT

    题目大意:给定 N 个点的 M 条约束,约束形式为:\(a_i \lor a_j = 1\). 题解:拆点什么的就不说了,在求出一组解的时候,考虑到 Tarjan 找环的过程中,scc 染色是按照拓扑 ...

  7. semantic ui框架学习笔记三

    网格系统 基本网格 <div class="ui grid"> <div class="column"></div> < ...

  8. 使用python制作验证码

    方法一 简单型:使用random模块制作一个随机字母与数字的验证码 import random def make_code(n): res='' for i in range(n): num=str( ...

  9. R语言:提取路径中的文件名字符串(basename函数)

    假设存在路径C:/coverage/Homo_sapiens.sort.add_exon1_coverage.txt,欲提取Homo_sapiens.sort.add_exon1_coverage.t ...

  10. GUI 设计

    GUI(图形化界面编程) Graphical  User  Interface (java.Awt    javax.Swing) CLI(命令行操作接口) Command  line  User   ...