首页 > 其他分享 >多线程

多线程

时间:2024-10-18 23:34:10浏览次数:5  
标签:run Thread void 线程 多线程 public

    进程:是系统进行资源分配和调用的独立单位,每一个进程都有它自己的内存空间和系统资源。
        举例:IDEA, 阿里云盘, wegame, steam
    线程:是进程中的单个顺序控制流,是一条执行路径
        一个进程如果只有一条执行路径,则称为单线程程序。
        一个进程如果有多条执行路径,则称为多线程程序。

    思考:
        java程序启动时,是单线程程序还是多线程程序?多线程程序的【主线程,垃圾回收线程】


    java提供了一个类用来描述线程:Thread
        线程是程序中执行的线程。
        Java虚拟机允许应用程序同时执行多个执行线程。
        每个线程都有优先权, 具有较高优先级的线程优先于优先级较低的线程执行。

实现多线程方式一:继承Thread方法,重写run()方法

点击查看代码
class MyThread extends Thread{

    public MyThread(String name) {
        super(name);
    }

    @Override
    public void run() {
        //run方法是将来线程对象启动时要执行的计算逻辑
        for(int i=1;i<=200;i++){
            System.out.println(getName()+" - "+i);
        }
    }
}

public class ThreadDemo1 {
    public static void main(String[] args) {
        //创建一个线程对象
//        MyThread t1 = new MyThread();
//        MyThread t2 = new MyThread();
        MyThread t1 = new MyThread("王骏");
        MyThread t2 = new MyThread("张万森");
        //给线程起名字
        // 方式1:调用setName()方法起名字
//        t1.setName("王骏");
//        t2.setName("张万森");
        // 方式2:使用构造方法起名字

//        t1.run();
//        t2.run();
        t1.start(); // 系统分配资源给线程t1,启动线程,t1线程具备了执行的资格,具体等到抢到cpu执行权的时候才会执行
        t2.start();//抢夺cpu

    }
}
   休眠线程
    public static void sleep(long millis)
点击查看代码
class MyThread2 extends Thread{
    @Override
    public void run() {
        System.out.println("我现在开始睡觉了...");
        try {//有异常,需要处理异常(try ..catch)
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("我醒了,现在开始学习!!");
    }
}
public class ThreadDemo2 {
    public static void main(String[] args) {
        MyThread2 myThread2 = new MyThread2();// new 一个对象
        myThread2.start();
    }
}

    加入线程:
        public final void join()
点击查看代码
class MyThread3 extends Thread {
    @Override
    public void run() {
        for (int i = 1; i <= 200; i++) {
            System.out.println(getName() + "-" + i);
        }
    }
}

public class ThreadDemo3 {
    public static void main(String[] args) throws InterruptedException {
        MyThread3 t1 = new MyThread3();
        MyThread3 t2 = new MyThread3();
        MyThread3 t3 = new MyThread3();


        t1.start();
        t1.join();//具有优先执行的权利

        t2.start();
        t3.start();
    }
}
  礼让:
       public static void yield()
点击查看代码
class MyThread4 extends Thread{
    @Override
    public void run() {
        for(int i=1;i<=200;i++){
            System.out.println(getName()+"- "+i);
            Thread.yield();
        }
    }
}

public class ThreadDemo4 {
    public static void main(String[] args) {
        MyThread4 t1 = new MyThread4();
        MyThread4 t2 = new MyThread4();

        t1.start();
        t2.start();
    }
}
    后台线程:
        public final void setDaemon(boolean on)


    用户线程:优先级高于守护线程
    守护线程【后台线程】:当一个程序没有了用户线程,守护线程也就没有了
点击查看代码

class MyThread5 extends Thread{
    @Override
    public void run() {
        for(int i=1;i<=200;i++){
            System.out.println(getName()+"- "+i);
        }
    }
}

public class ThreadDemo5 {
    public static void main(String[] args) {
        MyThread5 t1 = new MyThread5();
        MyThread5 t2 = new MyThread5();
        MyThread5 t3 = new MyThread5();

        t1.setName("刘备");
        t2.setName("关羽");
        t3.setName("张飞");

        //将t2和t3线程设置为守护线程
        t2.setDaemon(true);
        t3.setDaemon(true);

        t1.start();
        t2.start();
        t3.start();
    }
}

中断线程:
        public final void stop()
        public void interrupt()

    java所有的线程要想变成运行状态,必须经过抢cpu执行权
点击查看代码
class MyThread6 extends Thread{
    @Override
    public void run() {
        System.out.println("王骏准备睡觉了....睡足10秒钟");
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("睡醒了,继续敲代码!!!");
    }
}

public class ThreadDemo6 {
    public static void main(String[] args) {
        MyThread6 t1 = new MyThread6();
        t1.start();

        try {
            Thread.sleep(5000);
//            t1.stop();//在第五秒的时候直接被打死了
            t1.interrupt();//在第五秒被打醒了继续学习
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
    创建线程的第二种方式:实现Runnable接口,借助Thread类创建线程对象

    若将来每一个线程执行的逻辑是一样的话,推荐采用第二种实现Runnable接口方式实现多线程
    若将来每一个线程执行逻辑不一样的话,推荐采用第一种继承Thread类方式实现多线程
点击查看代码
class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 1; i <= 200; i++) {
            //可以先通过获取当前执行的线程对象,调用内部getName()方法
            System.out.println(Thread.currentThread().getName()+"-"+i);
        }
    }
}

public class RunnableDemo1 {
    public static void main(String[] args) {
        //创建Runnable对象
        MyRunnable r1 = new MyRunnable();
        //创建线程对象
//        Thread t1 = new Thread(r1);
//        Thread t2 = new Thread(r1);
//        Thread t3 = new Thread(r1);
        //创建线程对象同时起名字
        Thread t1 = new Thread(r1, "李刚");
        Thread t2 = new Thread(r1, "祝帅");
        Thread t3 = new Thread(r1, "吴问强");

        //获取线程优先权 默认线程优先级是 5
//        System.out.println("t1: "+t1.getPriority());
//        System.out.println("t2: "+t2.getPriority());
//        System.out.println("t3: "+t3.getPriority());
        t1.setPriority(1); // 1-10
        t1.setPriority(10);
        t1.setPriority(1);

        t1.start();
        t2.start();
        t3.start();
    }
}

标签:run,Thread,void,线程,多线程,public
From: https://www.cnblogs.com/wangxiaojian-lina/p/18475222

相关文章

  • 【Java】多线程 Start() 与 run() (简洁实操)
    Java系列文章目录补充内容Windows通过SSH连接Linux第一章Linux基本命令的学习与Linux历史文章目录Java系列文章目录一、前言二、学习内容:三、问题描述start()方法run()方法四、解决方案:4.1重复调用.run()4.2重复调用start()4.3正常调用start()不会报出......
  • java多线程
    学习java多线程packagecom.haole.testdemo1;classRunnableDemo3implementsRunnable{privateStringname;privateThreadx;RunnableDemo3(Stringa){name=a;}@Overridepublicvoidrun(){for(inti=0;i<4;......
  • 多线程(五):死锁&内存可见性问题
    目录1.synchronized---监视器锁monitorlock2.死锁2.1死锁---情况12.1.1可重入2.1.2 如何实现一个可重入锁[面试题]2.2死锁---情况22.2.1BLOCKED2.2.2手写死锁代码[经典面试题]2.3 死锁---情况33.避免死锁的出现3.1构成死锁的四个必要条件★......
  • 【Linux线程】Linux多线程编程:深入理解线程互斥与同步机制
    ......
  • Java多线程编程:深入理解与实践
    java笔记,点击下载在现代软件开发中,多线程编程已成为提高程序性能和响应能力的关键技术之一。Java作为一门高级编程语言,提供了丰富的多线程支持,使得开发者能够轻松地编写并发程序。本文将深入探讨Java多线程的基本概念、实现方式以及最佳实践。多线程的基本概念多线程是指......
  • 一个月学会Java 第20天 多线程
    Day20多线程线程,很重要的概念,因为我们的CPU假如是intel或者amd的都是说一核二线程,假如你的电脑是8核的cpu那基本上就是16线程,如果你的mac的M芯片自然是几核就是几线程。想要查看自己的电脑是几个线程的我们有几种方法,一种直接使用Java运行一串代码,其次我们可以看任务管......
  • 【Linux】<互斥量>解决<抢票问题>——【多线程竞争问题】
    前言大家好吖,欢迎来到YY滴Linux系列,热烈欢迎!本章主要内容面向接触过C++的老铁主要内容含:欢迎订阅YY滴C++专栏!更多干货持续更新!以下是传送门!YY的《C++》专栏YY的《C++11》专栏YY的《Linux》专栏YY的《数据结构》专栏YY的《C语言基础》专栏YY的《初学者易错点》......
  • 【Linux】解锁线程基本概念和线程控制,步入多线程学习的大门
    目录1、线程初识1.1线程的概念1.2.关于线程和进程的进一步理解1.3.线程的设计理念1.4.进程vs线程(图解)1.5地址空间的第四谈2.线程的控制:2.1.关于线程控制的前置知识2.2创建线程的系统调用:这个几号手册具体代表的什么含义?2.3.线程终止我们怎么没有像进程一样获取线程......
  • OS-Lab4-多线程编程基础
    实验目的事先编辑好数据文件1.dat和2.dat,它们的内容分别为12345678910和-1-2-3-4-5-6-7-8-9-10。根据示例代码和其运行效果设计一个程序,在这个程序中一共有3个线程,其中两个线程负责从文件读取数据到公共的缓冲区,另外一个线程从缓冲区读取数据作不同的处理(加和......
  • 多线程&JUC的学习
    1、什么是线程?进程:进程是程序的基本执行实体。一个软件运行之后就是一个进程。线程:是操作系统能够运行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。简单理解:应用软件中互相独立,可以同时运行的功能。2、多线程的作用?        提高效率。3、多线......