• 方法一:继承Thread类实现

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

    2.重写A的run()方法

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

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


例如:

  1. package 多线程;
  2. /*
  3. *1.创建两个线程分别完成100以内奇数偶数的输出
  4. */
  5. public class CreateThread {
  6. public static void main(String[] args){
  7. Test1 t1 = new Test1();
  8. Test2 t2 = new Test2();
  9. t1.start();
  10. t2.start();
  11. }
  12. }
  13. //输出偶数
  14. class Test1 extends Thread {
  15. @Override
  16. public void run() {
  17. for (int i = 0; i < 50; i++) {
  18. if (i % 2 == 0) {
  19. System.out.println("线程一输出偶数:"+i);
  20. }
  21. }
  22. }
  23. }
  24. //输出奇数
  25. class Test2 extends Thread{
  26. @Override
  27. public void run() {
  28. for(int i =0; i < 50;i++){
  29. if (i %2 != 0) {
  30. System.out.println("线程二输出奇数:"+i);
  31. }
  32. }
  33. }
  34. }
  35. 线程一输出偶数:0
  36. 线程一输出偶数:2
  37. 线程一输出偶数:4
  38. 线程二输出奇数:1
  39. 线程二输出奇数:3
  40. 线程二输出奇数:5
  41. ....
  42. 线程二输出奇数:47
  43. 线程二输出奇数:49
  44. 线程一输出偶数:6
  45. 线程一输出偶数:8

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


  • 方法二:实现Runnable接口

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

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

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

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

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


例如:

  1. package 多线程;
  2. public class CreateThread2 {
  3. public static void main(String[] args){
  4. Test3 t3 = new Test3();
  5. Test4 t4 = new Test4();
  6. //多态性
  7. Thread t = new Thread(t3);
  8. Thread tt = new Thread(t4);
  9. t.start();
  10. tt.start();
  11. }
  12. }
  13. //输出偶数
  14. class Test3 implements Runnable{
  15. @Override
  16. public void run() {
  17. for (int i = 0; i < 50; i++) {
  18. if (i % 2 == 0) {
  19. System.out.println("线程一输出偶数:"+i);
  20. }
  21. }
  22. }
  23. }
  24. //输出奇数
  25. class Test4 implements Runnable{
  26. @Override
  27. public void run() {
  28. for (int i = 0; i < 50; i++) {
  29. if (i % 2 != 0) {
  30. System.out.println("线程二输出奇数:"+i);
  31. }
  32. }
  33. }
  34. }
  35. //结果和上一个类似
  • 注意事项

    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. jmeter登录配置

    前言: jmeter, Apache下的测试工具, 常用来进行压测, 项目中, 接口通常都需要进行登录才能被调用, 直接调用将提示"登录失效", 下面介绍如何在jmeter中配置参 ...

  2. UVa 12325 - Zombie's Treasure Chest-[分类枚举]

    12325 Zombie’s Treasure Chest Some brave warriors come to a lost village. They are very lucky and fi ...

  3. Spark in action Spark 以及SparkR的安装配置说明

    Spark以及SparkR的安装(standalone模式) From :ssdutsu @ Inspur Company  suzhiyuan2006@gmail.com 操作系统 CentOS 7 ...

  4. CSS3侧栏滑出简单实现

    使用css3 的 animation 属性实现的点击滑出侧栏 <!DOCTYPE html> <html lang="en"> <head> & ...

  5. dotnet 手动解决 json 解析中不合法字符串

    如果使用 Newtonsoft Json 解析字符串,字符串里面有不清真的格式,那么默认的解析将会炸掉.如果想要自己解决字符串中的不清真格式,可以使用传入 JsonSerializerSettings ...

  6. 【2016常州一中夏令营Day6】

    小 W 算树[问题描述]山有苞棣,隰有树檖.未见君子,忧心如醉~小 W 养了一棵有 N 个点的无根树,由于小 M 最喜欢二叉树了,为了讨小 M 欢喜,小 W想知道有多少个点作为根后,这棵树是一棵二叉树 ...

  7. 网易Java高级开发课程随笔

    java学习也有6个月之久,记录下课程相关知识点,目前我还没有掌握,so仅作技术点记录 鉴于在.NET上我封装了一套开发框架,虽去年按.NET封装的思路自己也弄了个java开发框架,还是感觉对java ...

  8. MySQL 命令行(转)

    1.登录mysql 本地:mysql -u root -p, 回车后输入密码; 也可以p后不加空格,直接加密码.回车就登录了 远程:mysql -hxx.xx.xx.xx -u -pxxx 2.查看数 ...

  9. mysql主从之binlog日志

    mysql的binlog说明 主从复制依赖于二进制日志文件,简称为binlog binlog里面有存放了偏移信息 mysql主库binlog信息查看命令 [root@master ~]# mysql ...

  10. 利用Python实现高度定制专属RSS

    前言 本文转载自个人博客网站,欢迎来访订阅.本篇属于定制RSS系列终极一弹,是三种方式中自由度最高.定制化最强的,也需要一定的编程能力.附上前两篇链接:1.利用Feed43为网站自制RSS源:2.如何 ...