首页 > 编程语言 >java中的多线程

java中的多线程

时间:2023-01-05 13:46:17浏览次数:38  
标签:run Thread void class 线程 java 多线程 public

一. 线程的创建

线程的创建方式有两种:

一种是继承Thread类,重写run()方法【这里的run()方法只是普通的方法】,在主方法中,创建该类的对象,调用对象的start()方法。

二种是实现Runnable接口,重写run()方法,在主方法中,以该实现类为参数,创建Thread线程,调用Thread的start()方法。

方式一:示例代码如下

 1 public class Thread01 {
 2     public static void main(String[] args) {
 3         Cat cat = new Cat();
 4         System.out.println("main: "+Thread.currentThread().getName());
 5         cat.start();
 6         System.out.println("hello world");
 7     }
 8 }
 9 
10 class Cat extends Thread{
11     private int num = 0;
12     @Override
13     public void run() {
14         while(true){
15             try {
16                 sleep(1000);
17             } catch (InterruptedException e) {
18                 e.printStackTrace();
19             }
20             System.out.println("我的是小猫" + (++num)+"Thread: " + Thread.currentThread().getName());
21             if(num >= 8){
22                 break;
23             }
24         }
25     }
26 }

方式二:示例代码如下

 1 public class Thread03 {
 2     public static void main(String[] args) {
 3         Thread thread = new Thread(new Dog());
 4         thread.start();
 5 
 6     }
 7 }
 8 class Animal_ {}
 9 class Dog extends Animal_ implements Runnable {
10     @Override
11     public void run() {
12         System.out.println("dog");
13     }
14 }

方式二的另一种写法:【匿名内部类作为参数】

 1 public class Thread03 {
 2     public static void main(String[] args) {
 3 
 4         // 使用匿名内部类,实现Runnable接口,重写run()方法,作为参数。
 5         new Thread(new Runnable() {
 6             @Override
 7             public void run() {
 8                 System.out.println("main: " + Thread.currentThread().getName());
 9             }
10         }).start();
14     }
15 }
16 class Animal_ {}
17 class Dog extends Animal_ implements Runnable {
18     @Override
19     public void run() {
20         System.out.println("dog");
21     }
22 }

两种方式的区别,继承Thread类,只能是单一继承,接口可以实现多个,因此遇到已有继承父类的子类,则必须实现Runnable接口,来创建进程。

方式二的模拟代码如下【静态代理模式】:加深对方式二的理解

public class ProxyThreadTest {
    public static void main(String[] args) {
        Cat1 cat1 = new Cat1();
        ProxyThread proxyThread = new ProxyThread(cat1);// 接口的多态
        proxyThread.start();

    }
}
class Animal{}
// 单一继承,若想使用线程,实现Runnable接口.
class Cat1 extends Animal implements Runnable {
    public Cat1() {
    }

    @Override
    public void run() {
        System.out.println("老虎嗷嗷叫");
    }
}
class ProxyThread implements Runnable{
    private Runnable target = null;
    @Override
    public void run() {
        if(target != null){
            target.run(); // 动态绑定
        }
    }

    public ProxyThread(Runnable target) {
        this.target = target;
    }

    public void start(){
        start0();
    }

    private void start0() {
        run();
    }
}

二. 线程的方法

start():开启线程

run():Runnable接口定义的方法,注意run()只是普通的方法,如果想让线程开始运作,应该是调用start()方法

yield():礼让【退让】,在cpu资源不足的情况下,让出自己的cpu和资源

join():插队,强制让调用该方法的线程执行

三. 守护线程

守护线程:主线程执行完毕,守护线程即使没有执行完成,也要结束

示例代码如下:

public class ThreadMethod01 {
    public static void main(String[] args) throws InterruptedException {
        MyDaemon myDaemon = new MyDaemon();
        // 设置守护线程,必须在开启线程之前
        myDaemon.setDaemon(true);
        myDaemon.start();
        for(int i = 0;i < 10;i++){
            System.out.println("宝强辛苦工作");
            Thread.sleep(1000);
        }
    }
}

class MyDaemon extends Thread {
    @Override
    public void run() {
        for(;;){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
            System.out.println("马蓉宋喆聊天...");
        }
    }
}

 四. 线程的生命周期

vip

 

标签:run,Thread,void,class,线程,java,多线程,public
From: https://www.cnblogs.com/zwgitOne123/p/17027304.html

相关文章

  • java.io.IOException: Permission denied——文件导出时报错
    背景业务系统中,有一个导出,就是很普通的列表查询,然后可以点击导出,生成一个文件。就这么一个功能。使用的excel工具类是:org.apache.poi.xssf用的poi这个工具类。问题......
  • Java基础语法
    基本的dos命令打开cmd的方式开始+系统+命令提示行Win+R输入cmd打开控制台在任意的文件夹下面,按住shift+鼠标右键,在此处打开命令行窗口资源管理器的地址栏前面加上......
  • Java毕业生就业系统学生就业统计系统
    简介本项目主要是为了统计毕业生就业情况(就业方向分为四种:参加工作,考研,自主创业,待就业),教师可登入该系统查看学生就业情况,包括:考研、职业领域、工作城市,薪资等统计情况,并且......
  • Java JUC学习笔记
    1、JUC简介在Java5.0提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步IO和轻量......
  • java在线视频播放系统视频网站影视网站电影电视剧播放网站源码
    简介ssm开发的视频网站。本项目主要包括了视频展示和查询功能,用户中心,积分管理,管理员管理等功能。演示视频https://www.bilibili.com/video/BV1tT4y1N7t8/?share_source......
  • java旅游日志博客系统旅行记录系统
    简介记录个人旅游动态日志的系统,也可以用来做博客系统,主页可以发布旅游日志,关注博主,给博主留言,管理评论,博文点赞,个人主页。演示视频https://www.bilibili.com/video/BV......
  • Java学习笔记
    一、Java8新特性1、HashMap​​深入浅出学Java——HashMap​​​​算法复杂度O(1),O(n),O(logn),O(nlogn)的含义​​2、ConcurrentHashMap​​HashMap?ConcurrentHashMap?相信......
  • Java个人博客系统ssh个人博客系统家乡特产家乡风景
    简介Java基于ssh开发的个人博客系统,主要有家乡特产文章,家乡风景,照片墙,留言等功能演示视频https://www.bilibili.com/video/BV1Yy4y1e7VR/?share_source=copy_web&vd_sou......
  • 如何通过Java应用程序将Word转为Excel
    平时在工作中,很多小伙伴会习惯性地将文件保存为Word文档格式,但有时会发现某些文件如果保存成Excel表格可能会更好地呈现。例如有的文本在Word文本中不如在Excel工作表编辑......
  • C# 多线程学习笔记
     ///进程:程序在服务器上运行是,占据的计算资源合集,称之为进程;///进程之间不会相互干扰--进程之间的通信比较困难(分布式)///线程:程序执行的最小单位,相应操作的最小执......