一:线程说明

  1,Java虚拟机允许应用程序并发的运行多个执行线程。

  2,线程都有自己的优先级,新线程会继承创建它的线程优先级。

  3,线程可以为守护线程和用户线程,如java资源回收线程为守护线程。当且仅当创建线程为守护线程时,新程序才是守护线程。

  

  个人总结:

    a:创建新线程只能通过Thread类或其子类,但可以通过实现Runnable接口和Callable接口写具体的执行代码。

      b:新创建的线程只能通过start()方法启动,而Runnable接口无start()方法,因此需借助Thread类才能创建;

  

二:Thread类

  1, java.lang.Thread类的继承关系

  

  

        上图为 java.lang.Thread类的继承关系,Thread类实现了java.lang.Runnable接口。

   2,java.lang.Thread类的构造方法

 

     从java.lang.Thread类的构造方法中,看出:

        a:可以创建新线程时命名。

        b:可以将实现Runnable接口的类作为参数,传入新线程。

        c:可以将新线程加入线程组,具体应用待研究。

  3,java.lang.Thread类创建新线程

    通过继承Thread类,并重写run()方法可以创建新线程对象,使用该对象start()方法启动线程。

 1 package com.thread.www;
 2
 3 class PrimeThread extends Thread{
 4     public PrimeThread(String thName) {
 5         this.setName(thName);
 6     }
 7
 8     @Override
 9     public void run() {
10         System.out.println("线程重要属性如下:");
11         System.out.println(" run 线程ID  ="+this.getId());
12         System.out.println(" run 线程名称 ="+this.getName());
13         System.out.println(" run 优先级      ="+this.getPriority());
14         System.out.println(" run 活跃状态 ="+this.isAlive());
15     }
16 }
17
18 public class Test1NewThread {
19     public static void main(String[] args) {
20         PrimeThread name = new PrimeThread("jack");
21
22         //启动执行线程
23         name.start();
24     }
25 }

NewThread1

执行结果:

二:Runable接口

    java.lang.Runable接口是为了执行代码提供一个公共协议。大多数情况下,如果不需要重写Thread类中除run()的其它方法,用这种方式创建新线程,需要:

      a:创建实现java.lang.Runnable接口的对象,重写run()方法。

      b:创建Thread类或其子类的对象,一般是用Thread类的对象,并且将a中创建对象作为参数传入该对象构造方法,再使用该对象start()方法启动线程。

 1 package com.thread.www;
 2
 3 class PrimeRun implements Runnable{
 4
 5     @Override
 6     public void run() {
 7         System.out.println("run do ..");
 8     }
 9 }
10
11 public class Test2NewThread {
12
13     public static void main(String[] args) {
14         //1:
15         PrimeRun name = new PrimeRun();
16
17         //2:需要创建Thread对象后,name作为参数传入,才能执行name.run()
18         new Thread(name).start();
19     }
20 }
21 /*
22  * 创建PrimeRun对象,只是建立线程的参数,真正创建线程并启动还需要Thread类或其子类
23  */

NewThread2

三:Callable接口创建执行线程的执行域

     通过实现Callable接口方式创建新线程,可以返回的线程运行结果或抛出的异常,具体实现需要:

        a:实现java.util.concurrent.Callalbe接口,并重写call()方法。

        b:创建java.util.concurrent.FutrueTask类的对象,并将a中创建对象作为参数传入该对象构造方法,FuntrueTask类实现了Runnable接口。

        c:创建Thread类或其子类的对象,一般是用Thread类的对象,并将b中创建的对象作为参数传入该对象构造方法,使用该对象start()方法启动线程。

 1 package com.thread.www;
 2
 3 import java.util.concurrent.Callable;
 4 import java.util.concurrent.FutureTask;
 5
 6 class PrimeCall implements Callable<Integer>{
 7
 8     //call() 方法区别 run(),可以返回结果,可以抛出异常
 9     @Override
10     public Integer call() throws Exception {
11         int sum = 0;
12         for (int i = 0; i < 1000000; i++) {
13             sum +=i;
14         }
15         return sum;
16     }
17 }
18
19 public class Test3NewThread {
20
21     public static void main(String[] args) {
22         int sumCall = 0;
23         //1:
24         PrimeCall pCall = new PrimeCall();
25
26         //2:Callable未实现Runable,不能直接作为Thread的参数,需要FutureTask过渡以及接收run()返回结果
27         FutureTask<Integer> futureCall = new FutureTask<Integer>(pCall);
28
29         //3:FutureTask实现了Runable,所以可以作为Thread的参数
30         new Thread(futureCall).start();
31
32         try {
33             sumCall = futureCall.get();
34 //            sumCall = futureCall.get(50, TimeUnit.NANOSECONDS);//可以设置等待结果的超时时间
35         } catch (Exception e) {
36             e.printStackTrace();
37         }
38
39         System.out.println(sumCall);
40
41     }
42
43 }

NewThread3()

参考资料:https://docs.oracle.com/javase/8/docs/api/

     http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

     https://www.cnblogs.com/baizhanshi/p/6425209.html

原文路径:http://www.cnblogs.com/xiaojia-new/p/8569006.html

转载于:https://www.cnblogs.com/xiaojia-new/p/8569006.html

java多线程编程(三)- 线程的创建相关推荐

  1. 多线程编程(2): 线程的创建、启动、挂起和退出

    python多线程编程(2): 线程的创建.启动.挂起和退出 如上一节,python的threading.Thread类有一个run方法,用于定义线程的功能函数,可以在自己的线程类中覆盖该方法.而创建 ...

  2. Java多线程编程(3)--线程安全性

    一.线程安全性   一般而言,如果一个类在单线程环境下能够运作正常,并且在多线程环境下,在其使用方不必为其做任何改变的情况下也能运作正常,那么我们就称其是线程安全的.反之,如果一个类在单线程环境下运作 ...

  3. java多线程编程之线程池技术全面解读

    在多线程编程时,创建线程是十分消耗资源的,当线程创建过多时,便会引发内存溢出,因此引入了线程池技术. 目录 线程池的优势 线程池的创建&使用 线程池的工作原理 线程池的参数 功能线程池 线程池 ...

  4. python多线程编程(2): 线程的创建、启动、挂起和退出

    From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节,python的threading.Thread类有 ...

  5. 小龙:c++多线程编程三(线程参数)

    一.传递临时对象作为线程参数 thread第一个参数是线程的开始函数,后面的参数分别表示开始函数的参数.下面看代码: #include <iostream> #include <th ...

  6. Java 多线程编程 实验题

    Java 多线程编程 实验二 1.创建键盘操作练习 2. 双线程猜数字 3. 月亮围绕地球 1.创建键盘操作练习 题目描述: 编写一个Java应用程序,在主线程中再创建两个线程, 一个线程负责给出键盘 ...

  7. java线程安全例子_Java总结篇系列:Java多线程(三)

    本文主要接着前面多线程的两篇文章总结Java多线程中的线程安全问题. 一.一个典型的Java线程安全例子 1 public classThreadTest {2 3 public static voi ...

  8. Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信

    前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  9. Java多线程编程-(4)-线程间通信机制的介绍与使用

    上一篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  10. Java 多线程(三) 线程的生命周期及优先级

    Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: ...

最新文章

  1. Visual Studio无法调试
  2. 成功解决getaddrinfo:请求的名称有效,但是找不到请求的类型的数据。(11004
  3. 【视频】vue生命周期函数
  4. Flume fan out(扇出)详解
  5. ubuntu16.04右键没有终端的问题
  6. java instanceof运算符_java的instanceof运算符
  7. 线程池和定时器——多线程的自动管理(转载)
  8. git如何合并指定文件内容_Git合并指定文件到另一个分支
  9. asp.net安全身份验证
  10. python数据分析与挖掘实战---chapter8中医证型关联规则挖掘
  11. 部分常见GIS专业英语词汇
  12. 引爆Spark大数据引擎的七大工具
  13. java微信公众号授权登录
  14. 数据库原理(2)——数据模型与概念模型
  15. android 市场 上传,安卓市场APP上传流程及审核要求
  16. cnblogs!I'm comeing!
  17. uni-app开发微信小程序,H5 关于压缩上传图片的问题
  18. 乐乐音乐4.0简洁版
  19. 神经网络-人脸表情识别
  20. itunes计算机无法启动,解决:Apple移动设备服务无法启动

热门文章

  1. 学完oracle 再学mysql_一篇文章让Oracle程序猿学会MySql【未完待续】
  2. MATLAB plot 画多条线段的问题
  3. pytorch学习率衰减
  4. 基于高光谱技术的农作物常见病害监测研究
  5. 【java】Applet显示阶乘结果
  6. Linux转到Server服务,Linux下安装telnet-server服务
  7. LSTM和GRU的解析从未如此通俗易懂(动图)
  8. 获取当前scn号scn1_11.1.1.2 基于SCN的查询(AS OF SCN)
  9. oracle有几种类型表空间,oracle 数据创建时如何指定表空间类型
  10. 2020计算机二级取消vb,2020年计算机二级VB模拟试题及答案