首页 > 其他分享 >多线程

多线程

时间:2022-10-20 23:23:52浏览次数:46  
标签:状态 Thread void 线程 new 多线程 public

多线程

概念:

Windows操作系统是多任务操作系统,它以进程为单位。每个独立执行的程序被称为一个进程,而每个进程又包含多个线程。系统可以分配给每个进程一段使用CPU的时间(CPU时间片),CPU在这段时间中执行某个进程,同理线程也会被分配一小段时间,进行并发执行线程

线程具有生命周期,其中包括五个状态,分别为出生状态,就绪状态,运行状态,暂停状态(休眠/等待/阻塞)和死亡状态

五种状态

  • 出生状态

    被创建时的状态称为出生状态

  • 就绪状态

    当线程对象调用starts()方法后进入就绪状态

  • 运行状态

    当线程得到系统资源后进入运行状态。

    线程一旦进入运行状态,就会在就绪与运行状态下转换,同时也也可能进入暂停或死亡状态。

  • 暂停状态

    当在运行状态下调用sleep()方法,wait()方法或者发生阻塞时,就会进入暂停状态。

    当在休眠结束,或者调用notify()或notifyAll( )方法,或者阻塞解除时,线程会重新进入就绪状态

  • 死亡状态

    当线程的run()方法执行完毕,或者线程发生错误,异常时,线程进入死亡状态

两种方法

继承Thread类

public class ThreadTest {
    public static void main(String[] args) {
        new Thread( new MyThread(),"A").start();
    }
}

class MyThread extends Thread{
    private int num=10;
    @Override
    public void run() {
        while(true){
            System.out.println(Thread.currentThread().getName()+" : "+num);
            num--;
            if(num<0){
                break;
            }
        }
    }
}

实现Runnable接口

public class RunnableTest {
    public static void main(String[] args) {
         new Thread(new MyRunnable(),"A").start();
    }
}
class MyRunnable implements Runnable{
 private int number=10;
    @Override
    public void run() {
        while (true) {

            System.out.println(Thread.currentThread().getName()+" : "+number);
            number--;
            if (number<=0){
                break;
            }
        }
    }

线程的休眠 Sleep( )

sleep()方法可以指定线程的休眠时间,线程的休眠时间以毫秒为单位

Thread.sleep(100);
public class SleepTest {
    public static void main(String[] args) {
        MyThread01 myThread01 = new MyThread01();
        new Thread( myThread01,"A").start();
    }
}
class MyThread01 implements Runnable{
         private int number=10;
    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(Thread.currentThread().getName()+":"+number);
            number--;
            if(number<0){
                break;
            }
        }
    }
}

线程的等待死亡(强行插队)方法join( )

join( )方法,等待线程死亡

public class JoinTest {
    public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new MyRunnable01());
        thread.start();
        for (int i = 0; i <50;i++){
            if(i==20){
                thread.join();
            }
            System.out.println("正在执行主线程任务");
        }
    }
}
class MyRunnable01 implements Runnable{
    @Override
    public void run() {

        for (int i=0;i<20;i++){
            System.out.println("join()方法强行插队");
        }
    }
}

线程的礼让Yield()

yield()方法,线程的礼让:1.让当前执行的线程暂停,但不阻塞 2.让cpu重新调度,但不一定礼让成功

public class TestYield implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"线程启动");
       Thread.yield();
        System.out.println(Thread.currentThread().getName()+"线程停止");
    }
    public static void main(String[] args) {
        TestYield testYield = new TestYield();
        new Thread(testYield,"A").start();
        new Thread(testYield,"B").start();
    }
}

标签:状态,Thread,void,线程,new,多线程,public
From: https://www.cnblogs.com/wfy-studying/p/16811737.html

相关文章

  • 【多线程那些事儿】如何使用C++写一个线程安全的单例模式?
    如何写一个线程安全的单例模式?单例模式的简单实现单例模式大概是流传最为广泛的设计模式之一了。一份简单的实现代码大概是下面这个样子的:classsingleton{public: s......
  • 多线程中Callable简单使用
    Callable接口具备的特征如下1.有简单的类型参数,与call()方法的返回类型相对应2.声明了call方法,执行器运行任务时,该方法会被执行器执行,它必须返回声明中指定类型的对象3.......
  • 多线程
    多线程基础线程简介任务进程(Process)一个进程可以有多个线程线程(Thread)多线程核心线程就是独立的执行路径在程序运行时,即使没有自己创建的线......
  • 多线程 学习
    ​​http://www.vchome.net/dotnet/dotnetdocs/dotnet1.htm​​作者:沐雪文章均系作者原创或翻译,如有错误不妥之处,欢迎各位批评指正。本文版权归作者有,如需......
  • 常用的多线程类
    常用的多线程类创建池ExecutorServiceexecutor=Executors.newFixedThreadPool(4);Executors工程类,可以提交任务。executor.submit(Callabletask)记得关闭池shut......
  • 【Java】多线程详解!
    多线程程序程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。进程进程(process)是程序的一次执行过程,或是正在运行的一个......
  • Python中的多线程
    线程和进程线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线进程之间相互独立,但同一线程......
  • Java 多线程(九)死锁及Lock
    死锁多个线程各自站有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形,某一个同步块同时拥有“两个......
  • 多线程的作用
    多线程的作用发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU......
  • Java 多线程(八)同步方法及同步块
    同步方法由于我们可以通过private关键字来保证数据对象只能被方法访问,所以我们需要针对方法提出一套机制,这套机制就是synchronized关键字,它包括两种用法:synchronized方......