首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >《多线程总结篇》《多线程向一个数组里面添加数据》

《多线程总结篇》《多线程向一个数组里面添加数据》

作者头像
发布于 2021-09-07 07:14:42
发布于 2021-09-07 07:14:42
1.1K02
代码可运行
举报
文章被收录于专栏:后端JavaEE后端JavaEE
运行总次数:2
代码可运行

一、基础

1.线程实现的三种方式

1.继承Thread类 2.实现Runnable接口 3.实现callable接口

2.线程停止stop()、线程休眠sleep()、线程礼让yield()、线程插队join()

3.线程的5大状态getState()

1.新建 2.就绪 3.运行 4.阻塞 5.死亡

4.线程的优先级getPriority()、setPriority()

设置优先级增加在cpu那里的权重

5.用户线程、守护线程

用户线程:main() 守护线程:gc() 虚拟机必须确保用户线程执行完毕,不必等待守护线程执行完毕

二、多线程同步解决

1.多个线程操作同一个资源,加锁synchronized、或者同步块synchronized(object){}实现线程同步、或者使用线程安全的对象

使用synchronized(object){}时,object为变化的量,默认是this

例子:使用多个线程向数组中添加数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.css.apps.base.dict.service;

import java.util.ArrayList;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * zt
 * 2021/6/17
 * 14:50
 */
public class TestDemo2 {
    /*public static void main(String[] args) {
        CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
        for (int i = 0; i < 10000; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    list.add(Thread.currentThread().getName());
                }
            }).start();
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(list.size());
    }*/
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 10000; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    synchronized (list){
                        list.add(Thread.currentThread().getName());
                    }
                }
            }).start();
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(list.size());
    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/06/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Javva学也学不明白之多线程机制详解。
在java中,每个栈和每个栈之间互不干扰,各自执行各自的,这就是多线程并发。java中之所以有多线程机制,目的就是为了提高程序的处理效率。
百思不得小赵
2022/12/01
2620
Javva学也学不明白之多线程机制详解。
Java-多线程
一个线程可以在给定时间点处于一个状态,这些状态是不反应任何操做系统线程状态的虚拟机状态
框架师
2021/03/05
8770
Java多线程(一篇从0讲透)
进程:是指一个内存中运行的程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程
不吃紫菜
2023/04/02
4300
Java多线程(一篇从0讲透)
Java 多线程基础
多线程(multithreading):指从软件或者硬件上实现多个线程并发执行的技术。
星姮十织
2022/01/02
4150
多线程二 synchronized的使用
它的机制是手动加锁,自动释放锁。下面看一个例子,在异常的地方一定要处理异常,不然就会想下面代码中的线程1,会被释放掉。
用针戳左手中指指头
2021/01/29
3100
多线程二 synchronized的使用
Java多线程基础
主线程挂了但是子线程还在继续执行,这并不会导致应用程序的结束。说明: 当main线程启动一个子线程 Thread-0, 主线程不会阻塞, 会继续执行(不会等执行完毕后再往下执行),这时 主线程和子线程是交替执行。
timerring
2023/05/07
3400
Java多线程基础
java---多线程[(重点)上]
以前写的程序都是单线程,main方法程序称为主线程,主线程的结束所有的子线程都会跟着结束。多线程就代表着一个程序可以去做多件事情。
用户10787181
2023/10/17
3390
java---多线程[(重点)上]
Java-线程
哈喽!大家好,我是小简。今天开始学习《Java-线程》,此系列是我做的一个 “Java 从 0 到 1 ” 实验,给自己一年左右时间,按照我自己总结的 Java-学习路线,从 0 开始学 Java 知识,并不定期更新所学笔记,期待一年后的蜕变吧!
小简
2023/01/04
4890
Java-线程
Java多线程的基本应用
在JDK1.5推出了TimeUnit类,该类可以根据时间单位来对线程进行睡眠操作;
绿水长流z
2024/06/13
1550
Java多线程的基本应用
多线程快速入门与多线程与线程高级(多线程实战【三】)
初始化状态 就绪状态 运行状态 死亡状态 阻塞状态 超时等待 等待状态
高大北
2022/06/14
3840
多线程快速入门与多线程与线程高级(多线程实战【三】)
Java多线程
1.新建:程序使用new创建线程后,就是新建状态,jvm会为他分配内存,并初始化成员变量的值
用户11010370
2024/03/08
1730
Java的多线程和高并发详解
多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。
北游
2021/06/30
1.5K0
Java的多线程和高并发详解
java多线程
进程:是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程,有它自身的产生,存在和消亡的过程。-------生命周期 线程:进程可进一步细化为线程,是一个程序内部的一条执行路径
不期而遇丨
2022/09/09
9860
java多线程
十五、多线程【黑马JavaSE笔记】
假如计算机只有一个CPU,那么CPU在某一个时刻只能执行一条指令,线程只有得到CPU时间片,也就是使用权,才可以执行指令。所以说多线程程序的执行是有随机性,因为谁抢到CPU的使用权是不一定的
啵啵鱼
2022/11/23
3090
十五、多线程【黑马JavaSE笔记】
Java 线程基础
简言之,进程可视为一个正在运行的程序。它是系统运行程序的基本单位,因此进程是动态的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。进程是操作系统进行资源分配的基本单位。
静默虚空
2019/12/26
5150
Java 线程基础
day18-多线程&线程同步&死锁
在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运行的时间是非常短的。
张哥编程
2024/12/13
1380
java基础thread——多线程的纷争(循序渐进)
正在运行的程序,是系统进行资源分配和调用的独立单位。 每一个进程都有它自己的内存空间和系统资源。
100000860378
2018/09/13
4160
java基础thread——多线程的纷争(循序渐进)
Java线程知识点总结
简言之,进程可视为一个正在运行的程序。它是系统运行程序的基本单位,因此进程是动态的。进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动。进程是操作系统进行资源分配的基本单位。
鱼找水需要时间
2023/03/09
3510
Java线程知识点总结
Java多线程技能
本文介绍了线程的用法,包括线程的创建、启动、挂起、结束等操作,并讲解了线程的共享资源、线程的同步、线程的中断等概念。同时,本文还介绍了线程的优先级、线程的状态、线程的同步、线程的通信、线程的调度、线程的同步等问题。
Java后端工程师
2017/12/13
1.1K0
Java线程
同一时刻 , 多个任务交替执行, 造成一种‘貌似同时’ 的错觉, 简单的说,单核cpu实现的多任务就是并发
用户11097514
2024/05/30
2390
Java线程
相关推荐
Javva学也学不明白之多线程机制详解。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档