博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java并发编程基础-线程-创建
阅读量:6437 次
发布时间:2019-06-23

本文共 1348 字,大约阅读时间需要 4 分钟。

hot3.png

线程

  • 前言:

          线程有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元,与进程区别最大的一点是:进程内的线程之间可以共享数据和代码,而进程之间是相互隔离的。 线程是Java并发编程中的核心。

  • 线程创建:

          创建Java线程通常有两种方式,第一种为继承Thread,然后通过new关键字创建;第二种为实现Runnable接口,然后通过new Thread(Runnable runnble)创建。两种方式示例如下:

    • 继承Thread,重写run方法

      private class MyThread extends Thread{    @Override    public void run() {        System.out.println(Thread.currentThread().getName() + " is running");    }}
    • 直接或间接实现Runnable,重写run方法

      private class MyRunnable implements Runnable{    @Override    public void run() {        System.out.println("my runnble is running");    }}
  • 线程的本质

    • 通过Thread类的native方法,这些方法调用操作系统底层函数完成线程的创建、运行、阻塞、等待、终止。Runnable只是一个接口,通过重写Runnable的run方法向Thread中传递需要执行的业务逻辑。

    • 在调用new Thread()时只是使用init方法将一些基础的属性进行初始化,比如线程组,一个线程真正的开始是通过调用native的start0方法。

  • 一个坑

          直接调用Thread的run方法使用的还是当前线程,从查看Thread源码可以发现run方法的实现如下:
    /* What will be run. */private Runnable target;
  • @Overridepublic void run() {    if (target != null) {        target.run();    }}
          正确的方式是调用start方法,start方法调用native的start0()方法,start0()会调用操作系统底层创建线程后,调用run方法,一个示例如下:
    public static void main(String[] args) {    //错误的调用方法    MyThread myThread = new MyThread();    myThread.run();    //正确的调用方法    myThread.start();}//输出结果main is runningThread-0 is running

参考书籍及网址:

  • 《Java并发编程的艺术》
  • 《深入理解Java虚拟机》

PS:研究基于MAC+Idea+JDK1.8 64位

Keep Calm and Carry on!

转载于:https://my.oschina.net/gordonfor/blog/1845322

你可能感兴趣的文章
Spring Boot制作启动图案
查看>>
《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理
查看>>
hdu Oil Deposits
查看>>
彻底理解javascript中的this指针
查看>>
SAS去空格
查看>>
MySQL用户和权限管理
查看>>
Spring Cloud构建微服务架构(二)服务消费者
查看>>
这些老外的开源技术养活了一票国产软件
查看>>
Maven实战(六)--- dependencies与dependencyManagement的区别
查看>>
创业者应该有的5个正常心态(转)
查看>>
php模式设计之 注册树模式
查看>>
【Android UI设计与开发】3.引导界面(三)实现应用程序只启动一次引导界面
查看>>
_ENV和_G
查看>>
别做操之过急的”无效将军”,做实实在在的”日拱一卒” 纵使一年不将军,不可一日不拱卒...
查看>>
Oracle Grid Infrastructure: Understanding Split-Brain Node Eviction (文档 ID 1546004.1)
查看>>
Linux改变进程优先级的nice命令
查看>>
**16.app后端如何保证通讯安全--url签名
查看>>
win32窗口机制之CreateWindow
查看>>
C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
查看>>
awakeFromNib小总结
查看>>