package cn.learn.thread.Thread;
/*
实现Runnable必须重写run()方法,一般推荐用Runnable实现 */
public class RunnableImpl implements Runnable { @Override
public void run() {
System.out.println(Thread.currentThread().getName()+"执行");
}
}
package cn.learn.thread.Thread;
/*
继承Thread类,实现多线程
实现步骤:
1.创建一个Thread类的子类
2.在Thread的子类中重写Thread类中的run方法设置线程任务
3.创建Thread的子类对象
4.调用Thread类中的start方法,开启新的线程,执行run方法
结果是两个线程并发地运行,当前线程(main线程)和另外一个线程(执行其run方法)
多次启动一个线程是非法的,特别线程结束后,不能重新启动
java属于抢占式执行,哪个线程级别高就优先执行;同一个优先级随机选择 */
public class ThreadExtends extends Thread { public ThreadExtends() {
} //使用父类来创建新线程名称
public ThreadExtends(String name) {
super(name);
} //重新run方法
@Override
public void run() {
//获取线程名称
//String name = this.getName();
//System.out.println("线程名称:"+name); //获取当前线程名称
Thread thr = Thread.currentThread();
System.out.println(thr); //链式编程
//System.out.println(Thread.currentThread().getName());
}
}
 package cn.learn.thread.Thread;
/*
JVM执行main方法,找OS开辟一条main方法通向cpu的路径
这个路径叫main线程-主线程
cpu通过该线程,路径就可以执行main方法 Thread继承与Runnable接口实现的区别
实现Runnable接口创建多线程的好处:
1.避免了单继承的局限性
2.增强了程序的扩展性,降低了耦合性(解耦),eg:多个Runnable的实现类可以有不同的线程任务
3.多个Thread对象,共用一个Runnable实现类对象的资源
*/ public class MyThread {
public static void main(String[] args) throws InterruptedException {
//创建Thread类的子类对象,如ThreadExtends有构造方法可在其类用super(name)父类来创建线程名称
ThreadExtends anThread = new ThreadExtends(); //可以用anThread.setName();来设置线程名称 //开辟新线程,用于执行run方法,如果直接使用run方法,还是单线程,由main方法来执行
anThread.start(); //开辟新的栈空间,新线程,ThreadExtends类中run方法运行,获取线程名称Thread-0 //再创建一个新线程,运行run(),获取线程名称Thread-1
new ThreadExtends().start(); //Thread[Thread-1,5,main] //获取当前线程名称
System.out.println(Thread.currentThread().getName()); //main //与上面的线程并发执行,不安全,抢占cpu,cpu有选择的权利,随机执行
for (int i = 0; i <10 ; i++) {
System.out.println("main"+i);
} //Thread的sleep暂时以指定毫秒数停止执行线程,结束后继续执行
//模拟秒表
for (int i = 0; i <60 ; i++) {
Thread.currentThread().sleep(1000);
System.out.println(i); } //创建线程的第二种方法
/*
创建线程的另一种方法是声明实现 Runnable 接口的类。
该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动。 需要用Thread来接受其对象,调用start,运行run开启新线程
*/
//
RunnableImpl runnableThread = new RunnableImpl();
//2,多个Thread共用一个runnableThread资源
Thread t=new Thread(runnableThread);
Thread t1=new Thread(runnableThread);
//
t.start(); //新线程开启
t1.start(); //新线程开启 }
}

Thread -线程的两种创建方式的更多相关文章

  1. java多线程总结一:线程的两种创建方式及优劣比较

    1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...

  2. java多线程总结:线程的两种创建方式及优劣比较

    1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...

  3. java多线程总结一:线程的两种创建方式及比较

    1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行.当程序作为一个应 ...

  4. python 多进程的两种创建方式

    Python中使用线程有两种方式:函数或者用类来包装线程对象. 第一种---------函数 菜鸟教程的我没看懂,说说我自己懂的----看视频理解的 import time import thread ...

  5. [转载]Java线程的两种实现方式

    转载:http://baijiahao.baidu.com/s?id=1602265641578157555&wfr=spider&for=pc 前言 线程是程序的一条执行线索,执行路 ...

  6. 【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  7. String变量的两种创建方式

    在java中,有两种创建String类型变量的方式: String str01="abc";//第一种方式 String str02=new String("abc&qu ...

  8. day 33 什么是线程? 两种创建方式. 守护线程. 锁. 死锁现象. 递归锁. GIL锁

    一.线程     1.进程:资源的分配单位    线程:cpu执行单位(实体) 2.线程的创建和销毁开销特别小 3.线程之间资源共享,共享的是同一个进程中的资源 4.线程之间不是隔离的 5.线程可不需 ...

  9. JAVA并发编程学习笔记------线程的三种创建方式

    创建线程一般有如下几个方式: 1. 通过继承Thread类来创建一个线程: /** * 步骤1:定义一个继承Thread类的子类 * 步骤2:构造子类的一个对象 * 步骤3:启动线程: * */ pu ...

随机推荐

  1. Python笔记(读取txt文件中的数据)

    在机器学习中,常常需要读取txt文本中的数据,这里主要整理了两种读取数据的方式 数据内容 共有四列数据,前三列为特征值,最后一列为数据标签 40920 8.326976 0.953952 3 1448 ...

  2. .linux基础命令三

    一. 两台服务器免密登录: 1. 生成密钥 ssh-keygen的命令手册,通过”man ssh-keygen“命令查看指令: 通过命令”ssh-keygen -t rsa“创建一对密匙,包括公匙和私 ...

  3. mysql中,表与表之间的关系

     """ 1.字段的修改.添加.删除 2.多表关系(外键) 3.单表详细操作:增删改,查(各种条件) """ 字段操作  create ta ...

  4. windows 10 自动升级后环境变量无效

    上个礼拜放假的时候,win10提示需要升级,我当时随手就一点更新并关机...今天,在启动项目时候尴尬了: D:\project\js\iam-web\code\iam-web>npm run d ...

  5. Apache Mesos1.0.1 编译安装部署教程(ubuntu)

    参考资料 官方文档:http://mesos.apache.org/documentation 中文翻译:http://mesos.mydoc.io/ GitHub:https://github.co ...

  6. C++中的const_cast

    开发环境 Qt Creator 4.8.2 编译器版本 MinGw 32-bit const_cast 用法: const_cast<type_id> (expression) 说明: 该 ...

  7. window环境下mysql导入sql文件时报错:ERROR: ASCII '\0' appeared in the statement

    错误信息: ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mo ...

  8. Car的旅行路线(Floyd+模拟)

    题目地址 贼鸡儿猥琐的一道题 好在数据不毒瘤,而且Floyd就OK了. 这道题的难点在于 建图,也很考验模拟能力,需要十分的有耐心. 建图 题目中告诉了我们一个矩形的三个点 我们在平面直角坐标系中随便 ...

  9. [php代码审计] php四种标记

    php手册中的介绍: 可以在 PHP 中使用四对不同的开始和结束标记.其中两种,<?php ?> 和 <script language="php"> < ...

  10. 批量搞机(二):分布式ELK平台、Elasticsearch介绍、Elasticsearch集群安装、ES 插件的安装与使用

    一.分布式ELK平台 ELK的介绍: ELK 是什么? Sina.饿了么.携程.华为.美团.freewheel.畅捷通 .新浪微博.大讲台.魅族.IBM...... 这些公司都在使用 ELK!ELK! ...