首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏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
  • 来自专栏二进制文集

    Redis 源码简洁剖析 11 - IO 线程及 Redis 6.0 多 IO 线程

    Redis 只有在处理「客户端请求」时,是单线程的;整个 Redis server 不是单线程的,还有后台线程在辅助处理任务。 Redis 不让主线程执行一些耗时操作,比如同步写、删除等,而是交给后台线程异步完成,从而避免了对主线程的阻塞。 创建的线程要运行的函数是 IOThreadMain,*arg 参数就是当前创建线程的编号(从 1 开始,0 是 IO 线程)。 * 2,则也会直接返回,直接使用 IO 线程处理待写客户端。 但是多 IO 线程并不会执行命令,执行命令仍然在 IO 线程。 参考链接 极客时间:12 | Redis 真的是单线程吗? 极客时间:13 | Redis 6.0 多 IO 线程的效率提高了吗?

    83620编辑于 2022-03-24
  • 使用线程窗口依然卡死的解决方法

    当你兴高采烈点击按钮时候,结果大失所望,窗口卡死了!接着你陷入沉思,是不是线程用错了? 界面卡死了!如图 我猜测这可能与python的GIL问题有关:   1. time库是纯python的,而PyQt的背后是Qt,这是纯C++的。   2. 当然,线程窗口的通信使用了信号/槽。 btn2,0,1) layout.addWidget(self.sec_label,1,0,1,2) thread = MyThread() # 创建一个线程 (lambda :thread.start()) btn2.clicked.connect(lambda :thread.terminate()) # 线程中止 def update

    46500编辑于 2025-07-19
  • 来自专栏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; } ?

    59210发布于 2021-02-03
  • 来自专栏二爷记

    Python多线程爬虫,播信息资料爬取采集

    头榜,一个集合播信息及资讯的网站,内容比较齐全,现今直播火热,想要找寻各种播信息,这类网站可以搜集到相关热门播信息。 ? 提一下多线程吧! 这里需要注意一个参数的调用的时候,args=(url,),同时多线程的使用,采集报错是一个很头疼的问题,基本都是服务器反应不过来,难道还是得采用Scrapy框架,大范围抓取。 运行效果: ? fake_useragent import UserAgent import requests,time,os from lxml import etree import threading #多线程

    1K10发布于 2020-07-22
  • 来自专栏爱可生开源社区

    OB 运维 | OceanBase 是如何关闭线程的?

    ---- 1背景 在 MySQL 备同步中,存在 stop slave;reset slave all 这样的命令来控制关闭线程,删除备相关信息。 说明 MySQL 中是备库同步;OceanBase 中类似场景存在于备集群中。 OceanBase 备集群没有 stop slave; reset slave all 的命令,但有类似场景。 验证一下,当 【备集群 clog 同步断开时间】 > 【clog 的保留时间】,再次开启备集群间的 clog 同步,新数据是否丢失? 那么,OceanBase 备集群与 MySQL 备库,在关闭线程,删除备相关信息上有哪些区别呢? ' cluster_id=xxxxxxxxx 删除备关系:备库解耦(较为繁琐,OCP V3.3.0 可以白屏化操作) 当 clog 同步断开,节点日志过期,重新打开日志同步:备集群不会丢数据 当

    59120编辑于 2023-08-18
  • 来自专栏从零开始学自动化测试

    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("退出主线程

    96261发布于 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
  • 来自专栏JavaEdge

    、主从和备区别

    两台都是主机,同时对外提供读写操作。客户端任意访问提供的一台。 主从

    2.3K21编辑于 2021-12-07
  • 来自专栏北山啦的博客

    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++){            

    39160编辑于 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 (!

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

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

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

    1.7K50发布于 2021-04-26
  • 来自专栏allsmallpi博客

    Java---线程多(工作内存)和内存模型(内存)分析

    内存是所有的线程所共享的,工作内存是每个线程自己有一个,不是共享的。   每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的内存副本拷贝。 不同线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过内存来完成,线程内存、工作内存三者之间的交互关系如下图: ? read(读取):作用于内存变量,把一个变量值从内存传输到线程的工作内存中,以便随后的load动作使用 load(载入):作用于工作内存的变量,它把read操作从内存中得到的变量值放入工作内存的变量副本中 那么如果同时开10线程,每一个线程运行100条数据,那么只需要10分钟就可以完成所有的操作。 前半句是指“线程内表现为串行语义”,后半句是指“指令重排序”现象和“工作内存内存同步延迟”现象。 线程状态 1. 新建状态(New):新创建了一个线程对象。 2.

    2.6K11发布于 2021-02-25
  • 来自专栏JavaEdge

    、主从和备区别

    两台都是主机,同时对外提供读写操作。客户端任意访问提供的一台。 主从

    3.5K20发布于 2021-10-18
  • 来自专栏运维开发王义杰

    MySQL复制

    在同一个城市的两个数据中心(中心A和中心B)配置两个MySQL实例为双复制模式是常见的设计。 MySQL双复制的配置涉及到许多步骤,以下是一个基本的步骤指南: 1. 配置复制:在服务器1上,查看二进制日志文件的状态: SHOW MASTER STATUS; 记录下File和Position的值。 启动复制:在每台服务器上,使用以下命令启动复制: START SLAVE; 这样就完成了MySQL双复制的配置。 请注意,在生产环境中使用双复制需要特别注意数据一致性问题。为了避免冲突,你可能需要使用某种方式将写操作分区,例如,让一部分应用只写入一台主机,另一部分应用只写入另一台主机。

    88730编辑于 2023-08-16
  • 来自专栏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
  • 来自专栏Golang语言社区

    线程编程10个例子--1

    一、问题的提出 编写一个耗时的单线程程序:   新建一个基于对话框的应用程序SingleThread,在对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND 线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了该进程的执行线程执行线程以函数地址形式,比如说 main或WinMain函数,将程序的启动点提供给Windows系统。 执行线程终止了,进程也就随之终止。   每一个进程至少有一个执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在应用程序中创建其它线程,多个线 程并发地运行于同一个进程中。 OnInitDialog()中添加语句: { …… // TODO: Add extra initialization here m_ctrlProgress.SetRange(0,99); m_nMilliSecond=10 m_hThread:当前线程的句柄; m_nThreadID:当前线程的ID; m_pMainWnd:指向应用程序窗口的指针 BOOL CWinThread::CreateThread(DWORD dwCreateFlags

    2.9K50发布于 2018-03-23
领券