线程,即代码的执行路径
java 面向对象编程。所以线程在java中也是用对象来表示的,创建线程对象的类就是 Thread
如下代码即开启一个新的线程,通过线程对象的start方法,即可启动线程 Thread thread = new Thread();
thread.start(); 线程,即代码的执行路径。线程执行的代码是哪些代码呢? public void run() {
if (target != null) {
target.run();
}
}
通过源码我们会发现,线程对象执行的代码,就是对象中 run方法中的代码
由于Thread类是sun公司封装好的类,我们不能直接改写Thread的run方法。
那么我们只能创建一个Thread类的子类,在子类中覆写run方法。那么线程对象 运行的就是子类中的run方法了。 以下代码实现 每隔500毫秒,打印一次线程对象名称,打印100次。
其中
sleep()是静态的方法,即是类调用的,所以在哪个线程调用了sleep方法代码,那么就是那个线程睡眠。
currentThread()返回当前的线程对象,该方法是一个静态的方法, 注意: 在哪个线程执行了currentThread()方法,就返回那个线程 的对象。
public static void main(String[] args) {
Thread thread = new Thread(){
@Override
public void run(){
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" 1 -- " + Thread.currentThread().getName());
System.out.println(" 2 -- " + this.getName());
}
}
};
thread.start();
} 查看thread类的源码:
public class Thread implements Runnable{

    private Runnable target;

    public Thread(Runnable target) {
init(null, target, "Thread-" + nextThreadNum(), 0);
} private void init(ThreadGroup g, Runnable target, String name,long stackSize, AccessControlContext acc) {
this.target = target;
} public void run() {
if (target != null) {
target.run();
}
}
}
由源码可知道,当thread类的构造方法入参为 runnable对象的时候,调用线程对象的start方法,进而调用的run方法就是runnable对象的run方法
public static void main(String[] args) {
     Thread thread2 = new Thread(new Runnable(){
public void run() {
for (int i = 0; i < 100; i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" 3 -- " + Thread.currentThread().getName());
// System.out.println(" 2 -- " + this.getName());
}
}
});
thread2.start();
//这里 this.getName() 就会保错,因为 new Runnable()对象不是线程对象,没有 getName 方法 } 一般我们采用runnable的方式,创建线程。
   因为1:继承是但继承的,如果一个类继承了thread类就没法继承其他的类了
因为2:更加体现面向对象-线程类负责启动线程/runnable实现类负责运行代码
同时有runnble实现类做参数和thread类子类对象,执行哪个run方法? -----> 子类的方法
public static void main(String[] args) {
      new Thread(
new Runnable(){
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("runnable :" + Thread.currentThread().getName()); }
}
}
){
public void run() {
while(true){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("thread :" + Thread.currentThread().getName()); }
}
}.start();
} //以上结构为 thread(runnable.run){run}
}
												

java 多线程 day01 创建线程的更多相关文章

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

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

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

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

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

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

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

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

  5. JAVA·多线程:创建线程的两种方式

    1.–扩展java.lang.Thread类 package multiThread; public class Thread02extThread { public static void main ...

  6. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  7. Java多线程系列--“JUC线程池”06之 Callable和Future

    概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...

  8. Java多线程系列--“JUC线程池”02之 线程池原理(一)

    概要 在上一章"Java多线程系列--“JUC线程池”01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我们通过分析Th ...

  9. Java多线程系列--“JUC线程池”03之 线程池原理(二)

    概要 在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包括:线程池示例参考代 ...

随机推荐

  1. PHP学习笔记(10)mysql常用命令

    1. 连接mysql数据库: 输入: mysql> mysql -uroot -p123(注意后面没有分号!!) 输出: mysql: [Warning] Using a password on ...

  2. ID4收藏

    IdentityServer4.Admin https://github.com/skoruba/IdentityServer4.Admin

  3. shell 实现mysql写入操作

    mysql -uroot study -proot << EOF > insert into top_n_movie(movie,sumprice)values('hello kit ...

  4. mysql information_schema 数据库简介:

    .CHARACTER_SETS 表 CREATE TEMPORARY TABLE `CHARACTER_SETS` ( `CHARACTER_SET_NAME` varchar() NOT NULL ...

  5. 后台运行 screen命令

    nohub不能用的,用这个 后台运行 yum install screen 只要Screen本身没有终止,在其内部运行的会话都可以恢复 登录到主机上执行screen -r就可以恢复会话的运行. 同样在 ...

  6. iframe宽高百分百显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. HP proliant服务器从usb启动

    1,开机出现自检画面开始按F9进入设置,进入BIOS 选择standard boot order(rpl),把usb driver放在第一位,保存好 2,按F1开始启动. (注:我使用ubuntu14 ...

  8. EF性能分析(一):动态SQL性能差.从OrderBy开始分析

    1. 问题背景 在我的力推下,部门业务开发转向ABP,其中ORM采用的是EntityFrameworkCore. 然而,在数据查询方面,出现了重大的性能问题... 请看代码: //在一个百万数据量的表 ...

  9. 《C++程序设计》朝花夕拾

      (以后再也不用破Markdown写东西了,直到它有一个统一的标准,不然太乱了--) 函数签名 int f (int a, int b) ↑ ↑ ↑ ↑ 返回类型 函数名 形 式 参 数 其中,函数 ...

  10. CSV转PDF(C++)

    CSV : Comma Separate Values 特点: 每条记录占一行 以逗号为分隔符 逗号前后的空格会被忽略 字段中包含有逗号,该字段必须用双引号括起来 字段中包含有换行符,该字段必须用双引 ...