栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java-多线程(什么是线程,线程的组成,线程的创建,线程的状态,线程的安全,线程池,线程的安全集合)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java-多线程(什么是线程,线程的组成,线程的创建,线程的状态,线程的安全,线程池,线程的安全集合)

一、进程的概念

正在运行的程序,是系统进行资源分配的基本单位

目前操作系统都是支持多进程,可以同时执行多个进程,通过进程ID区分

单核CPU在同一时刻,只能有一个进程;宏观并行,微观串行

二、线程的概念

线程,又称为轻量级进程(Light Weight Process)

进程中的一条执行路径,也是CPU的基本调度单位。

一个进程由一个或多个线程组成,彼此间完成不同的工作,同时执行,称为多线程。

三、进程和线程的区别

1.进程是操作系统资源分配的基本单位,而线程是CPU的基本调度单位。

2.一个程序运行后至少有一个进程

3.一个进程可以包含多个线程,但是至少需要有一个线程,否则这个进程是没有意义。

4.进程间不能共享数据段地址,但是同进程的线程之间可以

四、线程的组成

任何一个线程都具有基本的组成部分   
          CPU时间片: 操作系统(OS)会为每个线程分配执行时间  

           运行数据:
                堆空间: 存储线程需要的对象,多个线程可以共享堆中的数据。
                栈空间:  存储线程需使用的局部变量,每个线程都拥有独立的栈。

            线程的逻辑代码.

五、线程的特点

1. 线程抢占式执行

        效率高
        可防止单一线程长时间独占CPU.

2. 在单核CPU中,宏观上同时执行,微观上顺序执行

六、线程的创建方式

1. 【继承Thread类,重写run方法】
2. 【实现Runnable接口】
3.  实现Callable接口

七、创建线程(继承Thread类)

1.创建

2. 获取和设置线程的名称

(1)获取线程ID和线程名称

1. 在Thread的子类中调用this.getId()或this.getName()
2. 使用Thread.currentThread().getId()和
Thread.currentThread().getName()

(2)修改线程名称

1. 调用线程对象的setName()方法
2. 使用线程子类的构造方法赋值

例子:4个窗口各卖100张票
 

public class Thread_01 extends Thread{
    int num=100;
    @Override
    public void run() {
        for (int i=0;i<=100;i++){
            System.out.println(Thread.currentThread().getName()+"卖的第"+i+"张票");
        }
    }
}
public class Test02 {
    public static void main(String[] args) {
        int num=100;
        Thread_01 m1=new Thread_01();
        m1.start();
        Thread_01 m2=new Thread_01();
        m2.start();
        Thread_01 m3=new Thread_01();
        m3.start();
        Thread_01 m4=new Thread_01();
        m4.start();


    }
}
八、创建线程(实现Runnable接口)

1.创建

2.例子:4个窗口共卖100张票

public class MyRunnable implements Runnable{
    static int num=100;
    @Override
    public void run() {
       while (num>0){
            num--;
            System.out.println(Thread.currentThread().getName()+"还剩"+num+"张票");
        }

    }
}
 public static void main(String[] args) {
        MyRunnable myRunnable=new MyRunnable();
        Thread t1=new Thread(myRunnable,"售票员1");
        Thread t2=new Thread(myRunnable,"售票员2");
        Thread t3=new Thread(myRunnable,"售票员3");
        Thread t4=new Thread(myRunnable,"售票员4");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
 九、线程的状态

十、线程的常用状态

休眠:
     public static void sleep(long millis)
     当前线程主动休眠millis毫秒。

放弃:
      public static void yield()
      当前线程主动放弃时间片,回到就绪状态,竞争下一次时间片

加入:
      public final void join()
      允许其他线程加入到当前线程中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1020534.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号