首先:线程与进程的区别是什么呢?

  进程:正在运行的一个程序称之为一个进程,进程负责了内存空间的划分,从宏观的角度:windows是在同时执行多个程序

    从微观的角度看,CPU是在快速的切换要执行的程序。实质上,一个时间片上只有一个程序在执行。

  线程:线程负责了代码的执行,就是进程中的执行路径。

  多线程:在一个进程中有多个线程同时在执行不同的任务

疑问1:线程负责了代码的执行,我们之前没使用线程为什么代码可以执行?

  答:JVM在运行的时候会自动创建一个main线程执行main方法中的代码。

疑问2:一个JAVA程序至少需要几个线程?

  答:至少需要2个线程,一个是主线程负责main方法的代码,另外一个是垃圾回收器的线程负责回收垃圾。

多线程的好处:1.解决了一个程序能够执行多个任务的问题

       2.多线程并没有提高效率  而是提高了资源的利通率。

多线程的弊端:

         1.增加了CPU的负担

       2.容易引发线程安全问题

       3.出现了死锁的现象

那么我们如何创建多线程呢?

  方式1:继承Thread类,并重写run()方法,并将自定义线程的任务代码写在run方法里。创建继承自Thread类的对象,然后调用start()方法开启线程。

  

  方式2:实现Runnable接口,并实现run()方法。将自定义线程的任务代码写在run()方法里。创建实现Runnable接口的类的对象,然后将对象作为实参传递给Thread方法创建线程对象,然后调用start()方法开启线程。

疑问:为什么要重写run方法,重写run方法的目的?

  答:每个线程都有自己的任务代码,jvm创建的主线程任务代码就是main方法中的所有代码,自定义线程的任务代码就写在run方法中,自定义线程负责了run方法中的代码

注意: run方法不能直接调用,直接调用run方法就相当于调用了一个普通的方法而已,并没有开启新的线程

问题1:请问Runnable实现类的对象是线程对象吗?
  Runnable实现类的对象并不是线程对象,只不过实现了Runnable接口的对象而已
  只有Thread或者Thread子类才能是线程对象 线程都有start方法开启线程
问题2:为什么要把Runnable实现类的对象作为实参传递给Thread对象?作用是什么?
  Thread类使用target变量记录了t1对象
  源码:public void run() {
    if (target != null) {
    target.run(); //将Runnable实现类的run方法作为线程对象的run方法
        }
      }
推荐使用第二种方式创建自定义线程:因为java是单继承多实现的

线程常用的方法:

Thread(String name) 初始化线程的名字
getName() 返回线程的名字
setName(String name) 设置线程对象名

sleep() 线程睡眠指定的毫秒数。是一个静态的方法,哪个线程执行了sleep方法那么就是哪个线程睡眠
为什么sleep不能抛出异常,只能捕获?
答:子类在重写Thread的run()方法,方法重写时子类抛出的异常类型要小于或者等于父类的异常类型。
Thread中run()没有抛出异常,所以子类也不能抛出异常。所以不能直接把异常抛出所以采用捕获的方法
currentThread() 返回当前CPU正在执行的线程的对象 哪个线程执行的 就返回哪个线程的对象

getPriority() 返回当前线程对象的优先级 默认线程的优先级是5 优先级数字越大的 执行的概率越高
setPriority(int newPriority) 设置线程的优先级 虽然设置了线程的优先级,但是具体的实现取决于底层的操作系统的实现(最大的优先级是10 ,最小的1 , 默认是5)。

JAVA创建多线程的更多相关文章

  1. java创建多线程(转载)

    转载自:Java创建线程的两个方法 Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对 ...

  2. java创建多线程的三种方式

    /***************************继承Thread类创建多线程************************/ public class FirstThread extends ...

  3. java创建多线程&创建进程

    概述 并发和并行是即相似又有区别: 并行:指两个或多个事件在同一时刻发生: 并发:指两个或多个事件在同一时间段内发生. 进程是指一个内存中运行中的应用程序.每个进程都有自己独立的一块内存空间,一个应用 ...

  4. Java创建多线程的三种方法

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...

  5. Java创建多线程和线程安全集合Vector

    public class Test { public static Vector<String> data = new Vector<String>(); public sta ...

  6. java创建多线程实现并行计算任务处理

    1.直接上代码一看明白: package multithreadingTest; class fblib extends Thread{ public static Integer fb(Intege ...

  7. Java 创建多线程的三种方法

    1. 继承Thread类2. 实现Runnable接口3. 匿名类的方式 注: 启动线程是start()方法,run()并不能启动一个新的线程

  8. Java多线程开发系列之二:如何创建多线程

    前文已介绍过多线程的基本知识了,比如什么是多线程,什么又是进程,为什么要使用多线程等等. 在了解了软件开发中使用多线程的基本常识后,我们今天来聊聊如何简单的使用多线程. 在Java中创建多线程的方式有 ...

  9. Java中多线程使用匿名内部类的方式进行创建3种方式

    /* * 匿名内部类的格式: */ public class ThreadDemo { public static void main(String[] args) { // 继承thread类实现多 ...

随机推荐

  1. Vim自动补全神器–YouCompleteMe

    一.简介 YouCompleteMe是Vim的自动补全插件,与同类插件相比,具有如下优势 1.基于语义补全 2.整合实现了多种插件 clang_complete.AutoComplPop .Super ...

  2. linuxx virutal machine installation

    1. vmplayer download: https://my.vmware.com/web/vmware/free#desktop_end_user_computing/vmware_player ...

  3. 关于Finereport移动端报表二次开发的两个小例子

    例1:刷新页面 1. 问题描述 A超链至B填报,B提交数据后返回A时,A自动刷新显示新的数据. 2. 解决方案 1. contentPane.setAppearRefresh();  //在A的加载结 ...

  4. 洛谷练习P2279 P1346

    题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状 ...

  5. sicily 猴子选大王

    题目描述 猴子选大王,有N只猴子,从1-N进行编号.它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数.第一只猴子报1,以后每只猴子报的数字都是它前面猴子所报数字加1.如果一只猴子报的数 ...

  6. Python的列表推导式,字典推导式,集合推导式使用方法

    推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 1.列表推导式也叫列表解析式.功能:是提供一种方便的列表创建方法,所以,列表解析式返回的是一个列表格式:用中括号括起 ...

  7. 自定义框架(MyMvc)

    //初次接触自定义框架,简单的登录功能的实现流程:: 当我们实现登录功能的时候,首先会创建一个login.jsp 会写这些登录表单 <form action="loginAction. ...

  8. Hololens入门之语音识别(语音命令)

    http://blog.csdn.net/sun_t89/article/details/52430923

  9. jquery的css详解(一)

    通过阅读源码可以发现css是jq的实例方法.而在内部调用jq的工具方法access来实现的,对该方法不了解的朋友请点击 -> jquery工具方法access详解 在access的回调中做了一个 ...

  10. 鼠标/手指相对于元素的坐标(px转百分比)

    鼠标/手指相对于元素的坐标:鼠标或手指当前的位置 - 元素距离文档的位置 px转百分比:px / 文档尺寸 * 100 获取手指触摸在屏幕中相对于元素的坐标(px转百分比): $('#div').on ...