美文网首页
多线程(一)

多线程(一)

作者: Responsibility_ | 来源:发表于2020-07-18 18:30 被阅读0次

如果一个程序能够运行多个线程,那么这个程序式多线程的.每个任务在一个线程中执行,执行线程简称线程.

线程与进程的区别

  • 进程是指在系统中正在运行的一个应用程序,它描述程序对网络,磁盘,内存,CPU等一系列的占用.
  • 线程是进程内独立的单元,一个进程内有若干个线程,但至少有一个线程,一般称为主线程

实现线程的两种方式

  • 建立Thread类的子类来定义线程,构造Tread类的子类的对象,调用start()方法.这种方法不建议使用,应当把运行任务与运行机制解耦.如果有多个任务,每个任务都需要创建一个单独线程,开销会太大.
  • 实现Runnable接口,实现Runnable接口的类并不是一个线程类,重写run方法中定义了运行任务,通过Thread的类创建线程对象.
    实际上两种方式实现机制相同,Thread类是Runnable接口的实现类.Runnable的实现类定义了线程任务,Thread类是创建线程的机制.

线程的状态

  • New(新建)
    用new操作符创建一个新的线程时,线程未开始,在开始前做基础工作.

  • Runnable(可运行)
    可运行其实可以分解为:就绪态和运行态,就绪态意味着程序未运行,需要操作系统提供具体的运行时间.
    现在所有的桌面以及服务器操作系统都使用抢占式调度.

  • Blocked(阻塞)

  • Waiting(等待)

  • Timed wating(计时等待)

  • Terminated(终止)

基本方法

java.lang.Thread

  • Thread(Runnble target)
    构造一个新线程,调用指定目标的run()方法
  • void start()
    启动这个线程,从而调用run方法
    注意:不要调用Runnable对象或者Thread类中的run方法,直接调用run方法只会在同一个线程中执行这个任务,而没有启动多线程.实际上应当调用Thread.strat方法,这会创建一个执行run方法的新线程.
  • static voidf sleep(long millis)
    休眠指定的毫秒数
  • static void yield()
    使当前正在执行的线程向另个一线程交出执行权(转为就绪态)
  • void join()
    等待终止指定的线程(等待子线程终止,主线程才能转为就绪)
  • setPriority();
    设置线程优先级,10最大,1最小,默认为5
  • currentThread()
    获取当前所执行的Tread类
  • setName() getName()
    获取更改线程名

代码示例

使用sleep方法进行排序

package com.apescource.demo;
/*
 *Thread.sleep()方法示例
 */
public class Demo6 {

    public static void main(String[] args) {
        // 数字数组
        int[] numbers = { 3, 9, 4, 23, 12, 9, 14 };
        // 线程数组
        Thread[] threads = new Thread[numbers.length];
        // 线程数组与数字数组一一对应
        for (int i = 0; i < numbers.length; i++) {
            //创建所有的线程
            threads[i] = new Thread(new NumberThread(numbers[i]));
        }
        //线程全部进入就绪态
        for (int i = 0; i < threads.length; i++) {
            threads[i].start();
        }
    }

}

class NumberThread implements Runnable {
    private int number;

    public NumberThread(int number) {
        this.number = number;
    }


    @Override
    public void run() {
        try {
            Thread.sleep(number*100);  
            System.out.println(number);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

}

相关文章

  • 多线程介绍

    一、进程与线程 进程介绍 线程介绍 线程的串行 二、多线程 多线程介绍 多线程原理 多线程的优缺点 多线程优点: ...

  • 多线程编程

    多线程编程之Linux环境下的多线程(一)多线程编程之Linux环境下的多线程(二)多线程编程之Linux环境下的...

  • 多线程

    创建一个多线程 创建多线程-继承线程类 创建多线程-实现Runnable接口 创建多线程-匿名类code

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • iOS多线程 NSOperation

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程 pthread、NSThread

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程: GCD

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程运用

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS多线程基础

    系列文章: 多线程 多线程 pthread、NSThread 多线程 GCD 多线程 NSOperation 多线...

  • iOS 多线程简介

    一.本文介绍点 1.为什么要学习多线程2.什么是多线程3.多线程的原理4.多线程的优缺点5.多线程的应用6.多线程...

网友评论

      本文标题:多线程(一)

      本文链接:https://www.haomeiwen.com/subject/erhnhktx.html