首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏JusterZhu

    Part10-线程

    1.线程是一个可执行的路径,它可以独立于其他线程执行。 2.每个线程都在操作系统的进程内执行,而操作系统进程提供了程序运行的独立环境。 3.单线程应用,在进程的独立环境里只跑一个线程,所以该线程拥有独占权。 4.多线程应用,单个进程中会跑多个线程,他们会共享当前的执行环境(内存)等。 5.进程和线程的对应关系,一个进程可以拥有多个线程,多个线程只能属于一个进程。 例如:一个非常耗时的操作(读数据库、复杂耗时的计算),如果只用主线程执行UI线程会“假死”专业术语叫线程阻塞。 这时候的解决办法就是单独开一个线程去执行这个耗时操作。这个时候处理的数据就可被称作是共享状态。

    7810编辑于 2022-12-07
  • 来自专栏Lambda

    10.JUC线程高级-线程八锁

    所谓线程八锁实际上对应于是否加上synchronized,是否加上static等8种常见情况,代码如下: 1.两个普通同步方法,两个线程,标准打印,结果:one two public class TestThread8Monitor } public static synchronized void getTwo(){ System.out.println("Two"); } } 以上就是线程的八种常见的情况 ,线程八锁的关键在于: 非静态方法的锁默认为this,静态方法的锁为对应的class实例(这里是Number.class) 某一个时刻内,只能有一个线程持有锁,无论有几个方法。 总结: ①一个对象里面如果有多个synchronized方法,某一个时刻内,只要一个线程去调用其中的一个synchronized方法了,其他的线程都只能等待,换句话说,某一时刻内,只能有唯一一个线程去访问这些 ②锁的是当前对象this,被锁定后,其他线程都不能进入到当前对象的其他的synchronized方法。 ③加个普通方法后发现和同步锁无关。

    24520编辑于 2022-04-13
  • 来自专栏Java小白成长之路

    10次文章:深入线程

    一、同步 当多个线程访问同一个资源时,由于每个线程访问同一份资源的时候,会有时间差。 使用synchronized的基本原理是:当已经有线程进入资源时,此时计算机会给当前资源一把锁,锁住当前资源,其他的线程只能在外部进行等待,线程被阻塞挂起。 start(); t2.start(); t3.start(); } } class Web12306 implements Runnable{ private int num = 10 左青龙4 生产了:右白虎5 消费了:右白虎5 生产了:左青龙6 消费了:左青龙6 生产了:右白虎7 消费了:右白虎7 生产了:左青龙8 消费了:左青龙8 生产了:右白虎9 消费了:右白虎9 生产了:左青龙10 消费了:左青龙10 生产了:右白虎11 消费了:右白虎11 生产了:左青龙12 消费了:左青龙12 生产了:右白虎13 消费了:右白虎13 生产了:左青龙14 消费了:左青龙14 生产了:右白虎15

    43930发布于 2019-09-27
  • 来自专栏游戏开发司机

    UNIX(多线程):10---线程unique_lock(下)

    #include <list> #include <mutex> using namespace std; class A { public: //把收到的消息(玩家命令)加入到一个队列的线程 std::cout << "主线程结束" << std::endl; return 0; } 缺省情况下,unique_lock和lock_guard作用相同。 ,阻塞20秒,另一个线程由于拿不到锁,也跟着阻塞20秒。 std::cout << "主线程结束" << std::endl; return 0; } ? std::cout << "主线程结束" << std::endl; return 0; } ?

    59110发布于 2021-02-03
  • 来自专栏从零开始学自动化测试

    python笔记10-多线程线程同步(锁lock)

    一、未锁定 1.如果多个线程同时操作某个数据,会出现不可预料的结果。 : thread.start() # 阻塞主线程,等子线程结束 for thread in threads: thread.join() time.sleep(0.1) print("退出主线程 二、 线程同步(锁lock) 1.为了避免以上这种情况发生,就引入锁的概念,锁有两种状态:锁定和未锁定 2.每当一个线程a要访问共享数据时,必须先获得锁定;如果已经有别的线程b获得锁定了,那么就让线程a 暂停,也就是同步阻塞;等到线程b访问完毕,释放锁以后,再让线程a继续。 : thread.start() # 阻塞主线程,等子线程结束 for thread in threads: thread.join() time.sleep(0.1) print("退出主线程

    96061发布于 2018-04-08
  • 来自专栏捡田螺的小男孩

    细数线程池的10个坑

    日常开发中,为了更好管理线程资源,减少创建线程和销毁线程的资源损耗,我们会使用线程池来执行一些异步任务。但是线程池使用不当,就可能会引发生产事故。今天田螺哥跟大家聊聊线程池的10个坑。 public static void main(String[] args) { ExecutorService executor = Executors.newFixedThreadPool(10 ,任务的执行时间比较长(比如,上面demo代码设置了10秒),会导致队列的任务越积越多,导致机器内存使用不停飙升, 最终出现OOM。 executor=new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setMaxPoolSize(10 executorOne.shutdown(); } } 10.

    1.3K50编辑于 2023-02-24
  • 来自专栏北山啦的博客

    java--第10章 多线程

    源代码: package homework.实验10_多线程; public class sy10_1 {     public static void main(String[] args) {         源代码: package homework.实验10_多线程; public class sy10_2 {     public static void main(String[] args){         源代码: package homework.实验10_多线程; public class sy10_3 {     public static void main(String[] args){         源代码: package homework.实验10_多线程; import java.util.*; import java.util.Random; public class sy10_4{ 属性     }     public void run(){  // 覆写run()方法,作为线程 的操作主体         for(int i=0;i<10;i++){            

    39060编辑于 2022-11-27
  • 来自专栏TA码字

    Tomcat NIO(10)-IO线程-关键类

    在上一篇文章里我们主要介绍了 tomcat io 线程的 overall 调用流程以及关键类SocketProcessor 和 ConnectionHandler 的核心逻辑总结,这里我们主要来介绍剩余其它的核心类 根据上一篇文章, ConnectionHanlder 如果发现返回 LONG 状态,会对 socket 包装对象去注册 OP_READ 事件,并添加到 poller 线程的事件队列里,让 poller 线程继续监听 client 端可读事件发送,从而等待 client 继续发送数据。 由于是长连接,所以和异步处理方式一样,对 socket 包装对象注册 OP_READ 事件,并添加到 poller 线程事件队列中,让 poller 线程继续去监听 client 端可读事件,从而结束当前请求 目前先写到这里,下一篇文章里我们继续介绍 tomcat io 线程中的读写。

    1.5K40发布于 2020-09-30
  • 来自专栏JavaCode

    Java【代码 10线程池ThreadPoolExecutor指定线程执行任务(修改线程名称+线程任务指定)

    1.说明有些时候,多线程只是追求并行操作,此时就需要指定线程完成特定任务了。 * maximumPoolSize指定最大线程数 * keepAliveTime和TimeUnit指定线程空闲后的最大存活时间 */ public static ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, corePoolSize + 1, 10L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1000), namedFactory, new ThreadPoolExecutor.AbortPolicy());}修改线程名称,并指定线程执行任务 ().map(Thread::getName).collect(Collectors.toList());// 修改线程名【可根据任务的某些参数对线程进行重命名】if (!

    26810编辑于 2025-07-25
  • 来自专栏痴者工良

    C#多线程(10):读写锁

    ReaderWriterLockSlim ReaderWriterLock 类:定义支持单个写线程和多个读线程的锁。 ,不断地读,开 2 个线程不断地创建订单。 AnyWritersSince(Int32) 指示获取序列号之后是否已将写线程锁授予某个线程。 UpgradeToWriterLock(Int32) 使用一个 Int32 超时值将读线程锁升级为写线程锁。 UpgradeToWriterLock(TimeSpan) 使用一个 TimeSpan 超时值将读线程锁升级为写线程锁。

    1.7K50发布于 2021-04-26
  • 来自专栏sktj

    python 多线程 性能评估(并行编程 10)

    如果程序没做什么操作,多线程的性能比单线程差 运行结果: starting tests non_threaded (1 iters) 0.000001 seconds threaded (1 threads show_results("threaded (%s threads)" % i, best_result) print('Iterations complete') ---- 程序做大量计算的时候,多线程的性能和单线程差不多 0.014513 seconds threaded (8 threads) 0.016649 seconds Iterations complete ---- 在进行大量IO操作的时候,多线程的性能比单线程

    72620发布于 2019-07-30
  • 来自专栏林德熙的博客

    win10 uwp 捕获后台线程异常

    本文告诉大家如何在 UWP 中捕获全局的后台线程异常,在出现后台线程异常时,将会让 UWP 程序闪退,但是在退出之前还是可以执行自己的代码 在 UWP 中,如果需要捕获前台线程,也就是 UI 线程的异常 Windows.UI.Xaml.UnhandledExceptionEventArgs e) { e.Handled = true;// 设置为 true 那么表示这个异常被处理,应用不会闪退 } 如果是后台线程异常 CurrentDomain_UnhandledException(object sender, System.UnhandledExceptionEventArgs e) { // 后台线程异常 ,执行到这里的应用就会闪退 } 触发后台线程异常很简单,请看下面代码 var thread = new Thread(() => throw new Exception ()); thread.Start(); 执行到创建线程然后在线程抛出异常,将会进入 CurrentDomain_UnhandledException 方法,然后应用程序退出。

    93910编辑于 2022-08-12
  • 来自专栏Golang语言社区

    线程编程10个例子--1

    为了更好地处理这种 耗时的操作,我们有必要学习——多线程编程。 二、多线程概述   进程和线程都是操作系统的概念。 :指定了线程的堆栈深度,一般都设置为0; lpStartAddress:表示新线程开始执行时代码所在函数的地址,即线程的起始地址。 OnInitDialog()中添加语句: { …… // TODO: Add extra initialization here m_ctrlProgress.SetRange(0,99); m_nMilliSecond=10 如果为0,则线程与其父线程具有相同的优先级; nStackSize:线程为自己分配堆栈的大小,其单位为字节。 我们知道,MFC中的线程分为两种:用户界面线程和工作者线程。我们将分别举例说明。

    2.9K50发布于 2018-03-23
  • 来自专栏二进制文集

    Java多线程,循环打印“ABC”10

    思路 3个线程A,B,C分别打印三个字母,每个线程循环10次,首先同步,如果不满足打印条件,则调用wait()函数一直等待;之后打印字母,更新state,调用notifyAll(),进入下一次循环。 MyThread extends Thread { int which; // 0:打印A;1:打印B;2:打印C static volatile int state; // 线程共有 which; } @Override public void run() { for (int i = 0; i < 10

    3.9K40发布于 2018-10-08
  • 来自专栏Golang语言社区

    线程编程10个例子--2

    ,定义为全局变量:CCriticalSection critical_section; char g_Array[10]; 添加线程函数:UINT WriteW(LPVOID pParam) { CEdit CEvent eventWriteD; char g_Array[10]; 添加线程函数: UINT WriteW(LPVOID pParam) { CEdit *pEdit=(CEdit*)pParam 例程10 MultiThread10 建立一个基于对话框的工程MultiThread10,在对话框IDD_MULTITHREAD10_DIALOG中加入一个按钮和三个编辑框控件,按钮的ID为IDC_START , 标题为“同时写‘A’、‘B’、‘C’”;三个编辑框的ID分别为IDC_A、IDC_B和IDC_C,属性都选中Read-only; 在MultiThread10Dlg.h文件中声明两个线程函数: UINT semaphoreWrite(2,2); //资源最多访问线程2个,当前可访问线程数2个 char g_Array[10]; 添加三个线程函数: UINT WriteA(LPVOID pParam) {

    2.3K70发布于 2018-03-23
  • 来自专栏各类技术文章~

    Java多线程10 同步工具类CyclicBarrier

    线程Thread-1写入数据完毕,等待其他线程写入完毕 线程Thread-3写入数据完毕,等待其他线程写入完毕 线程Thread-2写入数据完毕,等待其他线程写入完毕 线程Thread-0写入数据完毕, 线程Thread-1写入数据完毕,等待其他线程写入完毕 线程Thread-3写入数据完毕,等待其他线程写入完毕 线程Thread-0写入数据完毕,等待其他线程写入完毕 线程Thread-2写入数据完毕, 线程Thread-0写入数据完毕,等待其他线程写入完毕 线程Thread-2写入数据完毕,等待其他线程写入完毕 线程Thread-1写入数据完毕,等待其他线程写入完毕 线程Thread-3正在写入数据. 线程Thread-1写入数据完毕,等待其他线程写入完毕 线程Thread-0写入数据完毕,等待其他线程写入完毕 线程Thread-3写入数据完毕,等待其他线程写入完毕 线程Thread-2写入数据完毕, 线程Thread-5写入数据完毕,等待其他线程写入完毕 线程Thread-4写入数据完毕,等待其他线程写入完毕 线程Thread-7写入数据完毕,等待其他线程写入完毕 线程Thread-6写入数据完毕,

    1.1K12发布于 2021-10-19
  • 来自专栏prepared

    10 分钟学会使用 Java 多线程

    maximumPoolSize(最大线程数) maximumPoolSize 是线程池中允许的最大线程数。如果任务数超过了核心线程数,且任务队列已满,线程池会创建新的线程,但不会超过最大线程数。 举例来说:核心线程数量为 5 个;全部线程数量为 10 个;工作队列的长度为 5。 刚开始都是在创建新的线程,达到核心线程数量 5 个后,新的任务进来后不再创建新的线程,而是将任务加入工作队列; 任务队列到达上线 5 个后,新的任务又会创建新的普通线程,直到达到线程池最大的线程数量 10 当当前任务小于最大线程数的时候,线程资源会保持核心线程池个数的线程,其他超过的线程资源在存活时间时间之后会被回收。 ThreadPoolExecutor cutomerPoolExecutor = new ThreadPoolExecutor(10, 10,

    32510编辑于 2023-12-07
  • 来自专栏福大大架构师每日一题

    2020-10-26:线程池的线程数怎么设置比较好?

    福哥答案2020-10-26: 简单回答: CPU密集型:【cpu核心数】【cpu核心数+1】【cpu核心数-1】。 IO密集型:【cpu核心数*2】。 求并发:【并发数=线程数/单个任务时间】。 中级回答: 首先,考虑线程池究竟需要几个呢?不同业务是否需要不同线程池来避免某个业务阻塞时,其他业务也无法运行。最好是业务分类,不同的线程池去执行。 N-1原因:然后,每个线程池的线程数量,要考虑业务上下游,cpu,io资源使用的情况,来设计。 还要考虑业务上下游,例如上游业务线程池个数,下游业务线程池个数,还有就是本身能使用的IO资源,例如数据库连接个数等等。 求并发数: 并发数=线程数/单个任务时间。 *** 【原创】腾讯面试官:线程池要设置多大 2020-10-26:线程池的线程数怎么设置比较好?

    1.8K10发布于 2020-10-26
  • 来自专栏林德熙的博客

    win10 uwp 非ui线程访问 ui

    大家都知道,不可以在 其他线程访问 UI 线程,访问 UI 线程包括给 依赖属性设置值、读取依赖属性、调用方法(如果方法里面修改了依赖属性)等。 一旦访问UI线程,那么就会报错,为了解决这个问题,需要使用本文的方法,让后台线程访问 UI 线程。 本文提供三个方法可以让其他线程访问 UI 线程 第一个方法是比较不推荐使用的,可能出现 win10 uwp Window.Current.Dispatcher中Current为null 请不要在这里使用 High ,一般都是使用比较低的优先 为何不设置为 High ,参见 CoreDispatcherPriority 那么比较推荐的一个方法是在一个用户控件或者Page之类的,如果在里面使用了异步线程需要访问

    67740发布于 2019-03-13
  • 来自专栏IT技术精选文摘

    10分钟手撸Java线程

    Java线程池核心原理 看过Java线程池源码的小伙伴都知道,在Java线程池中最核心的类就是ThreadPoolExecutor,而在ThreadPoolExecutor类中最核心的构造方法就是带有7 至此,我们自定义的Java线程池就开发完成了。 总结 线程池的核心原理其实并不复杂,只要我们耐心的分析,深入其源码理解线程池的核心本质,你就会发现线程池的设计原来是如此的优雅。 希望通过这个手写线程池的小例子,能够让你更好的理解线程池的核心原理。

    22710编辑于 2021-12-13
领券