首页 > 编程语言 > Java多线程编程

Java多线程编程

时间:2023-12-11 23:31:40浏览次数:44  
标签:Java void 编程 线程 java 多线程 public

本文中简单介绍一些java多线程相关的内容

1. 多线程基础

Java通过java.lang.Thread类和java.util.concurrent包提供了多线程支持。一个线程可以通过继承Thread类或实现Runnable接口来创建。

class MyThread extends Thread {
    public void run() {
        // 线程执行的代码
    }
}

// 启动线程
MyThread myThread = new MyThread();
myThread.start();

2. 线程同步与互斥

在多线程环境下,可能会涉及到共享资源的读写问题。为了防止数据不一致或者产生竞态条件需要使用同步机制。Java提供了synchronized关键字来实现同步:

class SharedResource {
    private int count = 0;

    public synchronized void increment() {
        count++;
    }
}

3. 线程间通信

Java提供了wait()notify()notifyAll()等方法来实现线程的通通信

class SharedResource {
    private boolean flag = false;

    public synchronized void produce() {
        while (flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        // 生产操作
        flag = true;
        notify();
    }

    public synchronized void consume() {
        while (!flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        // 消费操作
        flag = false;
        notify();
    }
}

4. 线程池的使用

Java的Executor框架提供了线程池的支持:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolExample {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newFixedThreadPool(5);

        for (int i = 0; i < 10; i++) {
            executorService.execute(() -> {
                // 线程执行的代码
            });
        }

        executorService.shutdown();
    }
}


标签:Java,void,编程,线程,java,多线程,public
From: https://blog.51cto.com/u_16340211/8778227

相关文章

  • 实验6 C语言结构体,枚举应用编程(附实验5 C语言指针应用编程)
    实验6一,实验目的二,实验准备三,实验内容1,实验任务1task1.c1#include<stdio.h>2#include<string.h>3#defineN3//运行程序输入测试时,可以把这个数组改小一些输入测试45typedefstructstudent{6intid;//学号7......
  • 实验6 C语言结构体、枚举应用编程
    四、实验结论4.实验任务4task4.c1#include<stdio.h>2#defineN1034typedefstruct{5charisbn[20];//isbn号6charname[80];//书名7charauthor[80];//作者8doublesales_price;//售价9......
  • Java第七课_面向对象编程
    1.面向对象的编程对象publicclassPractice01{publicstaticvoidmain(String[]args){/*面向对象的编程,将一切事项都视为对象.对象用类来描述,过程在类里实现.使用时只需要调用类,不需要再考虑如何实现.将对象的共同特征进行......
  • Java学习之路(十六)
    Java学习之路(十六)1、File类1.1、File类概述和构造方法【应用】File类介绍它是文件和目录路径名的抽象表示文件和目录是可以通过File封装成对象的对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的.将来是要通过具体......
  • Java学习之路(十七)
    Java学习之路(十七)1、字符流1.1、为什么会出现字符流【理解】字符流的介绍由于字节流操作中文不是特别的方便,所以Java就提供字符流字符流=字节流+编码表中文的字节存储方式用字节流复制文本文件时,文本文件也会有中文,但是没有问题,原因是最终底层操作会自动进行字节拼......
  • C#泛型编程:深入探究泛型的威力
    文章目录泛型(Generic)泛型(Generic)的特性泛型约束派生约束构造函数约束值约束引用约束多个泛型参数泛型类继承泛型约束泛型方法泛型方法的重载泛型方法的重写虚方法泛型泛型委托泛型强转泛型参数隐式强制转换泛型参数显示强制转换泛型参数强制转换到其他任何类......
  • javaweDay1补充
    1.<label>标签可以使label标签中所包含的任何区域都可以聚焦到一个点如果没有label则必须点击那个圆圈才可以选上,而若有点击男也可以选中。2.下图中value后跟的值表明勾选男的时候提交表单的提交为1若改为男则是男3select定义下拉列表,option定义列表项 4.<textarea>文本......
  • Java学习之路(十五)
    Java学习之路(十五)1、Map集合1.1、Map集合概述和特点【理解】Map集合概述interfaceMap<K,V>K:键的类型;V:值的类型Map集合的特点双列集合,一个键对应一个值键不可以重复,值可以重复Map集合的基本使用publicclassMapDemo01{publicstaticvoidmain(Strin......
  • 软件测试/人工智能|Java Edit Plus 安装与配置指南
    前言最近我这个一直使用Python的人,开始尝试学习了一下Java,我的朋友跟我说,别像Python那样,开始就使用一个功能强大的IDE,Java语法更为复杂,可以先使用一个轻量化的编辑器,我开始准备使用notepad++,我朋友跟我推荐了EditPlus,我使用之后,就真香了,本文就给大家介绍一下EditPlus的安装和配置。......
  • java 数组添加元素的两种方法
    方式一:创建一个新数组,长度为原数组加1,然后将原数组数据添加到新数组,最后再添加需要的新数据 @Testpublicvoidredd111(){String[]s1={"aaa","bbb","ccc"};String[]s2=newString[s1.length+1];for(inti=0;i<s1.length;i++){......