• 方法一:继承Thread类实现

    1.创建一个类A,并继承Thread类

    2.重写A的run()方法

    3.创建A的实例对象b,即创建了线程对象

    4.使用b调用start()方法:启动线程(会自动调用run方法)


例如:

package 多线程;
/*
*1.创建两个线程分别完成100以内奇数偶数的输出
*/ public class CreateThread {
public static void main(String[] args){
Test1 t1 = new Test1();
Test2 t2 = new Test2();
t1.start();
t2.start();
}
}
//输出偶数
class Test1 extends Thread {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (i % 2 == 0) {
System.out.println("线程一输出偶数:"+i);
}
}
}
} //输出奇数
class Test2 extends Thread{
@Override
public void run() {
for(int i =0; i < 50;i++){
if (i %2 != 0) {
System.out.println("线程二输出奇数:"+i);
}
}
}
}
线程一输出偶数:0
线程一输出偶数:2
线程一输出偶数:4
线程二输出奇数:1
线程二输出奇数:3
线程二输出奇数:5
....
线程二输出奇数:47
线程二输出奇数:49
线程一输出偶数:6
线程一输出偶数:8

输出结果省略了一部分,可以看出来,两个线程的执行是交替的,所以奇数和偶数也是交替输出.


  • 方法二:实现Runnable接口

    1. 定义子类A,实现Runnable接口。

    2. 子类中重写Runnable接口中的run方法。

    3. 通过Thread类含参构造器创建线程对象。

    4. 将Runnable接口的子类对象作为实际参数传递给Thread类的构造器中。

    5. 调用Thread类的start方法:开启线程,调用Runnable子类接口的run方法。


例如:

package 多线程;

public class CreateThread2 {
public static void main(String[] args){
Test3 t3 = new Test3();
Test4 t4 = new Test4(); //多态性
Thread t = new Thread(t3);
Thread tt = new Thread(t4);
t.start();
tt.start();
}
}
//输出偶数
class Test3 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (i % 2 == 0) {
System.out.println("线程一输出偶数:"+i);
}
}
}
}
//输出奇数
class Test4 implements Runnable{
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (i % 2 != 0) {
System.out.println("线程二输出奇数:"+i);
}
}
}
}
//结果和上一个类似
  • 注意事项

    1. 如果自己手动调用run()方法,那么就只是普通方法,没有启动多线程模式。

    2. run()方法由JVM调用,什么时候调用,执行的过程控制都有操作系统的CPU 调度决定。

    3. 想要启动多线程,必须调用start方法。

    4. 一个线程对象只能调用一次start()方法启动,如果重复调用了,则将出现异常。

  • 比较两种方法

    1.继承Thread:线程代码存放Thread子类run方法中。

    2.实现Runnable:线程代码存在接口的子类的run方法。

    3.实现方式的好处:

    ​ ①避免了单继承的局限性

    ​ ②多个线程可以共享同一个接口实现类的对象,非常适合多个相同线 程来处理同一份资源

  • 说在最后

    码字不易,感谢支持。水平有限,难免错漏和不准确,欢迎批评指正!

Java多线程的创建(一)的更多相关文章

  1. Java多线程(1) 创建

    一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下以下这张较为经典的图: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Threa ...

  2. java多线程-概念&创建启动&中断&守护线程&优先级&线程状态(多线程编程之一)

    今天开始就来总结一下Java多线程的基础知识点,下面是本篇的主要内容(大部分知识点参考java核心技术卷1): 1.什么是线程以及多线程与进程的区别 2.多线程的创建与启动 3.中断线程和守护线程以及 ...

  3. Java多线程的创建与简单使用

    一.线程的基本概念 什么是线程:Thread 进程内部的一个执行单元,它是程序中一个单一的顺序控制流程. 线程又被称为轻量级进程(lightweight process) 如果在一个进程中同时运行了多 ...

  4. java多线程之创建线程的4种方式及Future

    Java使用Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.Java可以用四种方式来创建线程: 继承Thread创建线程 实现Runnable接口创建线程 实现callab ...

  5. Java多线程的创建(二)

    前言: 虽然java的API中说创建多线程的方式只有两种(There are two ways to create a new thread of execution),分别是继承Thread类创建和 ...

  6. java多线程-线程创建

    Java 线程类也是一个 object 类,它的实例都继承自 java.lang.Thread 或其子类. 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: ...

  7. Java多线程-----匿名内部类创建线程

       1.继承Thread类创建线程 package com.practise.createthread; public class AnonymousThread { public static v ...

  8. Java多线程——之一创建线程的四种方法

    1.实现Runnable接口,重载run(),无返回值 package thread; public class ThreadRunnable implements Runnable { public ...

  9. Java多线程之创建线程的三种方式比较

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6560057.html  一:继承Thread类创建线程 1:继承Thread类定义线程子类: 2:重写run( ...

随机推荐

  1. P1099 双连击

    题目描述 我们假设一个二位整数 \(N(10 \le N \le 99)\) ,它的十位上的数字是 \(A\) ,个位上的数字是 \(B\) ,如果 \(A\) 和 \(B\) 的比例关系满足 \(A ...

  2. java 使用反射操作字段

    Field提供两组方法操作字段: xxx getXxx(Object obj):获取obj对象该Field的字段值,此处的xxx表示8个基本数据类型.若该字段的类型是引用数据类型则使用,Object ...

  3. tomcat下的work目录和temp目录

    1. tomcat下的work目录 1    用tomcat作web服务器的时候,部署的程序在webApps下,这些程序都是编译后的程序(发布到tomcat的项目里含的类,会被编译成.class后才发 ...

  4. js操作改变原数组的解决方法

    最近在开发的时候发现js中的循环操作会改变原数组,var一个变量承接也不行 甚至连map方法都会改变原数组,下面是解决方法 let a = ['a','b','c'] let b = [[2, 0, ...

  5. jquery监听输入框只能输入数字

    $('#mm').bind('input propertychange',function(){ var val= $(this).val(); if(val!=''&& isNaN( ...

  6. Linux 内核总线注册

    如同我们提过的, 例子源码包含一个虚拟总线实现称为 lddbus. 这个总线建立它的 bus_type 结构, 如下: struct bus_type ldd_bus_type = { .name = ...

  7. openwrt上wifi探针的实现----mt7620a+rt2860v2

    openwrt上wifi探针的实现----mt7620a+rt2860v2 [摘要:甚么是wifi探针 看到探针,感到很矮小上的模样,实在便是经过wifi汇集经由那个AP局限的脚机的mac地点,出有甚 ...

  8. 编写自己的JDBC框架(转)

    一.元数据介绍 元数据指的是"数据库"."表"."列"的定义信息. 1.1.DataBaseMetaData元数据 Connection.g ...

  9. 看各类框架源码淘来的一些JavaScript技巧

    1. 创建定长的JavaScript数组,并赋空值: 出自VUE文档Render函数讲解 // 创建定长20的JavaScript数组,并把每个项的值设为null Array.apply(null, ...

  10. salesforce零基础学习(九十五)lightning out

    随着salesforce对lightning的推进,越来越多的项目基于lightning开发,导致很多小伙伴可能都并不了解classic或者认为不需要用到classic直接就开始了lightning的 ...