01 多线程概念及其实现方式

  • 多线程是编程过程里必不可少的内容,学习多线程,就先要了解进程和线程的概念。
  • 进程:是指当前正在运行的程序,是一个程序在内存里的执行区域;
  • 线程:是在进程里的一个执行控制单元,执行路径;

实现多线程的方式有两种,一种是继承Thread类,一种是实现runnable接口。

1.继承Thread类

a) 根据API中的描述:创建新执行线程,继承Thread类方法是将类声明为 Thread 的子类。该子类应重写 Thread 类的 run 方法。

如下所示:

public class ThreadDemo extends Thread {
    @Override
    public void run() {
        for (int i=0;i<100;i++){
            System.out.println(getName()+":"+i);
        }

    }
}
  • getName()  方法用于 返回该线程的名称

b) 接下来可以分配并启动该子类的实例

如下所示:

    public static void main(String[] args) {
            ThreadDemo xc = new ThreadDemo();
            xc.setName("thread1");
            xc.start();

            ThreadDemo xc2= new ThreadDemo();
            xc2.setName("thread2");
            xc2.start();
    }
  • setName(String name)方法可以改变线程名称,使之与参数 name 相同
  • start()   方法使该线程开始执行;Java 虚拟机调用该线程的 run 方法

2.实现runnable接口

a) API中的描述是:创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动

如下所示:

public class RunableDemo implements  Runnable {
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println(Thread.currentThread().getName()+":"+i);
        }
    }
}
  • currentThread()我们实现了Runnable接口,接口里是没有getName方法的,所以如果我们想要获得到当前线程的基本信息,就需要用到Thread类的这个方法。API中描述:返回对当前正在执行的线程对象的引用,这个对象中是有getName()方法的。

b) 调用线程时,是使用Thread类,继承的对象作为一个参数传入

如下所示:

    public static void main(String[] args) {
            RunableDemo xc = new RunableDemo();
            Thread thread = new Thread(xc);
            thread.setName("thread1");
            thread.start();

            Thread thread2 = new Thread(xc);
            thread2.setName("thread2");
            thread2.start();
    }
  • RunableDemo 实现了Runnable接口,这个对象作为runnable类型的对象传入Thread类中
  • 最后通过start()方法进行启动,运行线程中的run()方法

原文地址:https://www.cnblogs.com/wlym/p/9684088.html

时间: 2024-10-24 23:13:38

01 多线程概念及其实现方式的相关文章

Windows内核原理系列01 - 基本概念

1.Windows API Windows 应用编程接口(API)是针对WIndwos操作系统用户模式的系统编程接口,包含在WindwosSDK中. 2.关于.NET .NET由一个被称为FCL的类库和一个被称为CLR的公共语言运行库组成.FCL是建立在CLR之上的,而CLR是一组标准的COM服务器,提供了垃圾回收,即时编译类型检验等特性.由于CLR的这些特性,使得开发人员的生产效率得以提高..NET框架与组建的关系如下: .NET应用程序 用户模式(托管代码) —————————— 类库(FC

多线程两种实现方式的区别

请解释Thread类与Runnable接口实现多线程的区别?(请解释多线程两种实现方式的区别?) 1. Thread类时Runnable接口的子类,使用Runnable接口实现多线程可以避免单继承局限!2. Runnable接口实现的多线程可以比Thread类实现的多线程更加清楚的描述数据共享的概念! 请写出多线程两种实现操作?(写出Thread类继承的方式和Runnable接口实现的方式代码!) 实现Thread类: 类似于代理设计模式! class MyThread extends Thre

黑马程序员--Java基础--01基本概念

1.Java的三大技术架构 JAVAEE(Java Platform Enterprise Edition):  开发企业环境下的应用程序,主要针对web程序开发: JAVASE(Java Platform Standard Edition): 完成桌面应用程序的开发,是其他两者的基础 JAVAME(Java Platform Micro Edition): 开发电子消费产品和嵌入式设备,如手机中的程序 我对三大技术构架理解 1.三大技术是指哪三大技术呢? 答:三大技术分别指JAVAEE,JAV

IOS 创建和使用多线程的6种方式

非原创  文字来自:http://www.cnblogs.com/yuanjianguo2012/p/3725480.html   纯属复制 进程和线程概念: 一个程序包含一个以上的进程,而一个进程又可以包含一个以上的线程,每一个进程都有自己独立的内存空间,相应的一个进程中的所有线程都共享该内存空间. 进程:是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的资 源分配单元,也是基本的执行单元.独立的地址空间使得不同的进程

java实现多线程的三种方式

java中实现多线程的方法有两种:继承Thread类和实现runnable接口 1.继承Thread类,重写父类run()方法   public class thread1 extends Thread {           public void run() {                 for (int i = 0; i < 10000; i++) {                         System.out.println("我是线程"+this.get

.NET的堆和栈01,基本概念、值类型内存分配

当我们对.NET Framework的一些基本面了解之后,实际上,还是很有必要了解一些更底层的知识.比如.NET Framework是如何进行内存管理的,是如何垃圾回收的......这样,我们才能写出更高性能的程序. 在.NET Framework中,有2个地方帮我们保存管理数据:一个是"堆",也叫"托管堆",由.NET Framework的垃圾收集器(Garbage Collection, GC)管理:另一个是"栈",也叫"线程堆栈&

Android多线程更新UI的方式

Android下,对于耗时的操作要放到子线程中,要不然会残生ANR,本次我们就来学习一下Android多线程更新UI的方式. 首先我们来认识一下anr: anr:application not reponse:应用程序无响应 主线程:UI线程 anr产生的原因:主线程需要做很多重要的事情,响应点击事件,更新ui,如果在主线程里面阻塞时间过久,应用程序就会无响应,为了避免应用程序出现anr,所有的耗时的操作,都应该放在子线程中执行. 认识了anr后,我们就来学习一下怎样在Android下开启多线程

Css3之基础-11 Css定位(定位概念 、定位方式)

一.CSS 定位概述 定位概念 - 普通流定位 - 页面中的块级元素框从上到下一个接一个地排列 - 每一个块级元素都会出现在一个新行中 - 内联元素将在一行中从左到右排列水平布置 - 浮动 - 相对定位 - 绝对定位 - 固定定位 定位属性 - position属性: - position: static/relative/absolute/fixed; - 偏移属性:实现元素框位置的偏移 - top/bottom/right/left: value; - 堆叠顺序 - z-index: val

Java实现多线程的两种方式

实现多线程的两种方式: 方式1: 继承Thread类 A: 自定义MyThread类继承Thread类 B: 在MyThread类中重写run() C: 创建MyThread类的对象 D: 启动线程对象. 问题: a. 为什么要重写run方法? run()方法里封装的是被线程执行的代码 b. 启动线程对象用的是哪个方法? start()方法 c. run()和start()方法的区别? 直接调用run方法只是普通的方法调用 调用start方法先会启动线程,再由jvm调用run()方法 方式2: