首页 > 其他分享 >多线程

多线程

时间:2023-11-20 14:56:17浏览次数:29  
标签:Thread class 线程 println new 多线程 public

多线程

创建线程的方法

  1. 继承Thread类,重写run方法,线程启动调用start方法

    class MThread extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
                if (i % 2 == 0) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }
            }
        }
    }
    public class ThreadTest1 {
        public static void main(String[] args) {
            MThread m1 = new MThread();
            m1.start();
            for (int i = 0; i < 100; i++) {
                if (i % 2 != 0) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }//main线程
            }
        }
    }
    
  2. 实现Runable接口,重写run方法,作为参数传入Thread对象,线程启动调用start方法

    class MRunnable implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
                if (i % 2 == 0) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }
            }
        }
    }
    public class ThreadTest2 {
        public static void main(String[] args) {
            MRunnable mThread = new MRunnable();
            Thread thread = new Thread(mThread);
            thread.start();
            for (int i = 0; i < 100; i++) {
                if (i % 2 != 0) {
                    System.out.println(Thread.currentThread().getName() + ":" + i);
                }//main线程
            }
        }
    }
    
  3. 实现Callable接口,重写call方法,作为参数传入FutureTask对象,然后再作为参数传入Thread对象,线程启动调用start方法,可以使用FutureTask获取返回值

    class MCallable implements Callable<Integer> {
        @Override
        public Integer call() throws Exception {
            System.out.println("111111");
            return 1;
        }
    }
    public class ThreadTest3 {
        public static void main(String[] args) throws ExecutionException, InterruptedException {
            MCallable mc = new MCallable();
            FutureTask<Integer> ft = new FutureTask<>(mc);
            new Thread(ft, "t1").start();
            System.out.println(ft.isDone());//轮询
            System.out.println(ft.get());//阻塞
        }
    }
    
  4. 线程池

线程同步的方法

  1. synchronized:

    修饰方法 :

    修饰静态方法是给当前类加锁,会作用于类的所有对象实例 ,进入同步代码前要获得 当前 class 的锁

    修饰实例方法是给当前对象实例加锁,进入同步代码前要获得当前对象实例的锁

    修饰代码块:

    对括号里指定的对象/类加锁:

    • synchronized(object) 表示进入同步代码库前要获得 给定对象的锁
    • synchronized(类.class) 表示进入同步代码前要获得 给定 Class 的锁
  2. ReentrantLock:

    Lock lock = new ReentrantLock();
    new Thread(() -> {
        lock.lock();
        try {
           ......
        } catch (InterruptedException e) {
        	e.printStackTrace();
        } finally {
        	lock.unlock();
        }
    }, "t1").start();
    

​ 使用顺序推荐:ReentrantLock > synchronized 同步代码块 > synchronized 同步方法

参考资料

标签:Thread,class,线程,println,new,多线程,public
From: https://www.cnblogs.com/wuzhimao/p/17843936.html

相关文章

  • Java 多线程事务控制
    Java多线程怎么做事务控制公司业务中遇到一个需求,需要同时修改最多约5万条数据,而且还不支持批量或异步修改操作。于是只能写个for循环操作,但操作耗时太长,只能一步一步寻找其他解决方案。具体操作如下:一、循环操作的代码先写一个最简单的for循环代码,看看耗时情况怎么样。/......
  • JAVA解析Excel文件 + 多线程 + 事务回滚
    1.项目背景:客户插入Excel文件,Ececel文件中包含大量的数据行和数据列,单线程按行读取,耗时大约半小时,体验感不好。思路:先将excel文件按行读取,存入List,然后按照100均分,n=list.szie()/100+1;n就是要开启的线程总数。(实际使用的时候,数据库连接池的数量有限制,n的大小要结合数据库连......
  • JAVA 解析Excel + 多线程 + 事务回滚(2)
    该方法为网上查询,感觉可行,并未真正尝试。主线程:packagecom.swagger.demo.service;importcom.alibaba.excel.context.AnalysisContext;importcom.alibaba.excel.event.AnalysisEventListener;importcom.swagger.demo.config.SpringJobBeanFactory;importcom.swagger.demo.m......
  • 多线程
    @目录CPU告诉你硬盘和网络到底有多慢CPU告诉你硬盘和网络到底有多慢https://cizixs.com/2017/01/03/how-slow-is-disk-and-network/java多线程有什么作用好处?https://cloud.tencent.com/developer/article/1841361作用:1、java多线程能够将各个任务分开执行,分开后的任务......
  • python—多线程之线程之间共享数据(Queue)
    Queue理解从一个线程向另一个线程发送数据最安全的方式可能就是使用queue库中的队列了。创建一个被多个线程共享的Queue对象,这些线程通过使用put()和get()操作来向队列中添加或者删除元素。Queue对象已经包含了必要的锁,所以你可以通过它在多个线程间多安全地共享数据。生产者和......
  • springboot整合前端实现断点续传、大文件秒传以及多线程上传下载
    前端,百度开源框架webuploader新建upload.htmlwebuploader官网地址:http://fex.baidu.com/webuploader/<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>webuploader</title></head><!--引......
  • 多线程threading模块(二)daemon和join的区别
    PythonVersion:3.10.12案列一:最简洁的情况,在多线程代码中不开启daemon或join功能。importthreadingimporttimeloop_count=5defcount_num(num):print('子线程<{}>开始运行'.format(num))forxinrange(10):time.sleep(x)print('子线程<{}>结束......
  • JavaSE day07-异常,多线程
    JavaSEday07-异常,多线程今日目标:异常的概述异常的分类异常的处理方式自定义异常多线程入门1异常的概述1.1什么是异常?异常就是程序出现了不正常情况,程序在执行过程中,数据导致程序不正常,最终导致了JVM的非正常停止注意:语句错误不算在异常体系中1.......
  • Java 创建多线程的三种方法
    在Java中创建多线程,往往都要通过Thread类来实现,今天学习下Java中创建多线程的三种方法[1]。1.继承Thread类通过继承Thread类实现多线程。主要方法:1.voidrun(),线程开启后,方法将被调用执行2.voidstart(),使此线程开始执行,Java虚拟机会调用run()方法实现步骤:1.定......
  • Java 多线程安全的使用小结
    在使用多线程进行编程的过程中,难免遇到共享资源读写问题,这是为了线程安全,一种思路就是使用锁来控制并发读写问题。在通过锁来实现并发安全中,常用的有以下几种:synchronized,对象锁ReentrantLock,重入锁ReentrantReadWriteLock,读写锁今天从使用的角度来看看这几种锁是如何使......