`
haoran_10
  • 浏览: 442559 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

多线程(1)-java多线程入门

阅读更多

一、线程实现方式

 

线程实现有两种方式:继承Thread类,实现Runnable接口

1、继承Thread类
public class MyThread extends Thread{

    @Override
    public void run() {
        System.out.println("Mythread执行");
    }

}
public class TestMain {
    public static void main(String[] args) {
        MyThread mythread = new MyThread();
        mythread.start();
    }
}
要点:继承Thread类,重写run方法,在run方法内编写代码实现业务。通过Thread实例的start方法启动多线程。
 
2、实现Runnable接口
public class MyRunnable implements Runnable{

    @Override
    public void run() {
        System.out.println("MyRunnable执行");
    }
}
public class TestMain {
    public static void main(String[] args) {
        Thread thread = new Thread(new MyRunnable());
        thread.start();
    }
}
要点:实现Runnable接口,实现run方法,在run方法内编写代码实现业务。通过Thread(new Runnable实现类)构造函数,构造Thread,通过Thread实例的start方法启动多线程。
 
 二、Thread 和 Runnable 的不同点

Runnable是接口;

Thread 是类,Thread本身是实现了Runnable接口的类;

我们知道“一个类只能有一个父类,但是却能实现多个接口”,因此Runnable具有更好的扩展性。

此外,Runnable还可以用于“资源的共享”。即,多个线程都是基于某一个Runnable对象建立的,它们会共享Runnable对象上的资源。

通常,建议通过“Runnable”实现多线程!

 

 

三、为什么线程通过start启动,而不是run方法启动

 

查看Thread源码中的start方法

 

public synchronized void start() {
	//如果线程不是"就绪状态",则抛出异常!
	if (threadStatus != 0)
		throw new IllegalThreadStateException();

	//将线程添加到ThreadGroup中
	group.add(this);

	boolean started = false;
	try {
		// 通过start0()启动线程
		start0();
		 // 设置started标记
		started = true;
	} finally {
		try {
			if (!started) {
				group.threadStartFailed(this);
			}
		} catch (Throwable ignore) {	
		}
	}
}

 Thread调用start方法时,会启动start0()方法,而start0()是一个native方法,此时然后java虚拟机则会调用run方法,启动另外一个线程,

 

而当前start方法继续执行,这时有两个线程同时运行,当start()方法执行完成之后,线程start方法执行结束,该线程不可以重新启动。

public void run() {
	if (target != null) {
		target.run();
	}
}

 

继续看run方法,如果是线程本身是通过实现Runnable接口构建的,那么调用Runnable的run方法,否则调用重写了run方法的Thread类的方法。

所以,只可以通过start方法启动线程,而调用run方法时,只是调用run方法而已,不会启动另外一个线程。

 

 

四、小结

一旦涉及到多线程需要解决的问题,一般会有共享资源,那么尽量采用实现Runnable接口的实现方式,可以在多线程之间共享资源。

 

 

5
1
分享到:
评论

相关推荐

    Educoder题目:Java入门 - Java初体验答案解析.md

    Educoder题目:Java入门 - Java初体验答案解析.md

    JAVA多线程入门教程

    Java多线程是Java编程中不可或缺的一部分,它允许程序同时执行多个任务,从而提高系统效率和响应速度。本文将从进程、线程的基本概念、Java中的多线程支持以及如何创建和控制线程等方面,为你提供一个入门级别的教程...

    Java多线程基础-01、数组概述.rar

    本资料“Java多线程基础-01、数组概述”将带你入门Java的多线程世界,并结合数组这一基本数据结构进行讲解。 首先,我们需要理解什么是线程。线程是操作系统分配CPU时间的基本单位,一个进程可以有多个线程,它们...

    Java多线程入门介绍.pdf

    ### Java多线程入门知识点详解 #### 一、引言 多线程是现代软件开发中的重要技术之一,尤其在Java编程语言中占有极其重要的地位。对于任何一位Java程序员而言,掌握多线程的基本概念和技术是非常必要的。本文将...

    day01-Java入门

    7. **多线程**:理解并发编程的概念,学习如何创建和管理线程。 8. **IO和NIO**:学习输入输出流以及非阻塞I/O模型。 9. **反射机制**:允许在运行时动态检查和操作类及对象。 10. **JavaFX或Swing**:用于构建图形...

    java线程入门,java线程入门

    以下是对Java线程入门的详细讲解: 1. **线程的基本概念**: - 线程是操作系统分配CPU时间的基本单元,一个进程可以包含一个或多个线程。 - 在Java中,每个应用程序至少有一个主线程,它负责启动和控制其他线程。...

    java多线程入门

    ### Java多线程入门知识点详解 #### 多线程背景知识介绍 在计算机科学领域,多线程技术是一项重要的编程技术,它允许程序同时执行多个任务。这种技术极大地提升了程序的执行效率,尤其是在多核处理器普及的今天。...

    Java线程入门

    ### Java线程入门知识点详解 #### 一、Java线程概览 - **目标读者**:本教程面向那些已经熟练掌握Java语言基本应用但对多线程编程尚不熟悉的程序员。 - **主要内容**:本教程将从零开始介绍Java线程的基础知识,...

    java线程入门

    - Java提供了线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等,它们在内部实现了线程同步,可以在多线程环境下安全地使用。 以上内容涵盖了Java线程的基本概念、创建方式、生命周期、同步机制、...

    蚂蚁课堂(每特学院)第一期-Java高端培训视频教程

    教程目录: ├─0001-多线程快速入门.zip ├─0002-多线程之间实现同步.zip ├─0003--多线程之间通讯.zip ├─0004--Java并发编程.zip ├─0005--数据交换格式与SpringIOC底层实现.zip ├─0006--自定义注解与设计...

    nachos-java及project1完整代码

    1. **多线程编程**:NACHOS会使用多线程模拟并发执行的进程,因此理解Java中的Thread类和线程同步机制(如synchronized关键字,wait(),notify()和notifyAll()方法)是必要的。 2. **中断和调度**:Project1可能...

    Java 多线程编程入门到精通源代码.zip

    内含 chapter02-chapter18 共 17 个实例性源码项目,内容循序渐进,由入门到精通。尤其适合于没有 Java 线程开发经验的朋友。自己动手敲出本资源解压缩后的 ...相信你理解了此源码之后,即可步入 Java 多线程开发。

    java线程入门级书籍

    ### Java线程入门知识点详解 #### 一、Java线程基础知识概述 **1.1 什么是线程?** 线程是程序执行流的最小单元,是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。在Java中...

    Java线程入门大全

    ### Java线程入门大全知识点详解 #### 一、线程基础概述 - **定义与特点:** - **线程**是一种比进程更细粒度的执行单元,它允许在一个进程中并发执行多个任务。 - **多线程**能够提高程序的效率和响应速度,...

    计算机后端-Java-Java高并发从入门到面试教程-课程准备.zip

    - **Java多线程**:Java通过Thread类和Runnable接口实现多线程,理解线程的创建、启动、同步和停止方法。 - **线程状态**:了解线程的五种基本状态:新建、就绪、运行、阻塞和死亡。 - **线程优先级**:理解Java...

    多线程入门详解多线程入门详解

    例如,当你在浏览器中浏览网页时,下载Java小程序、播放音频、滚动页面等活动都是由不同的线程并行处理的,这就是多线程的优势所在。它可以充分利用CPU资源,提高程序的效率,避免了单一线程等待时的空闲。 【多...

    完整版Java全套入门培训课件 Java基础 05-多线程(共12页).rar

    Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个独立的代码段,提高了应用程序的效率和响应速度。在本套完整的Java入门培训课件中,我们将深入探讨多线程的相关知识,帮助初学者掌握这一关键技能。 ...

    学习java 0-JAVA入门.ppt

    - **多线程**:Java内置多线程支持,提供了丰富的同步机制,便于编写并发程序。 - **动态性**:Java支持运行时的类库扩展和适应环境变化,体现了其灵活性。 - **丰富的类库**:Java拥有强大的标准类库,涵盖各种...

Global site tag (gtag.js) - Google Analytics