线程,即代码的执行路径
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. js上传控件 plupload 使用记录

    最近一个项目需要使用一个上传控件进行多图片上传,给用户更好的体验,找到了plupload,用了一下感觉还是不错的, 1.从官网上  可以获得例子 ,我集成到了jsp,如下: <%@ page l ...

  2. PL/SQL Developer导入、导出表结构和表数据

    在表的所有者不能改变的情况下,可以使用导入导出表结构和表数据的方法,将表移动到你想要的所有者下(注:特别是建立表的时候如果以sysdba的身份登录的话,所有表的所有者都为sys,此时会对你用c#访问数 ...

  3. python学习笔记1--python简介

    Python翻译中文是蟒蛇.发明人guido喜欢蟒蛇马戏团,故起名python. python发展简史: --CNRI时期.CNRI资助Python发展的重要单位,python1.5版之前的成果大部分 ...

  4. curl 远程下载图片

    <?php echo httpcopy("http://www.baidu.com/img/baidu_sylogo1.gif"); function httpcopy($u ...

  5. xml传输过程中中文乱码

    ------------------------------------------request:----------------------------------------------- pu ...

  6. 基于WebBrowser 的爬虫程序

    WebBrowser的属性和事件 WebBrowser 如何跳转页面 web.Navigate(""); WebBrowser 如何循环跳转获取页面内容 bool loading ...

  7. Androidz之字符串国际化问题

    (1)字符串的国际化 在res下写两个values 注意:命名方式都是固定的 一个中文版:values-zh 一个英文版:values-en 可是<string name  要写成一样的,这样会 ...

  8. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha

    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha ...

  9. Mac 终端命令行颜色高亮显示

    一.颜色高亮显示 针对terminal采用bash模式: 编辑 ~/.bash_profile, 加入以下代码: export CLICOLOR=1 export LSCOLORS=gxfxaxdxc ...

  10. Angular2 初识

    AppComponent 壳的三个实现文件: app.component.ts— 组件的类代码,这是用 TypeScript 写的. app.component.html— 组件的模板,这是用 HTM ...