多线程】假设我现在有十条线程,我想从一个有百万数据的数据库取出信息,你该怎么做?

2021-01-18 19:16发布

2条回答
石丰源 - Code the future
2楼 · 2021-02-04 15:52
groupNum = / List listThreads = ArrayList()(i = i < i++) {
            count = ilistThreads.add(Thread() {
                () {
                    (j = j < j++) {
                        id = j + * }
                }
            })}
(i = i < i++) {
            listThreads.get(i).start()}


Uzi
3楼 · 2021-02-07 16:42

其中这个问题我印象特别深刻,这个是使用平常我们在学习中的一个思想:标记思想,在设计表的时候单独添加一个字段,通过改变字段来获取线程,因为线程是无序启动的,当第一条线程启动拿走的部分数据状态位发生变化,第二条线程启动再进行再从状态位未发生变化的数据中获取,依次执行即可。

相关问题推荐

  • 回答 7

    没有所谓的核心线程,线程只有单线程和多线程之分~首先,关于计算机系统的很多概念,都有逻辑层 和 物理层的区分,这个是前提。然后再看,核心这个概念是物理层的概念,指的就是 CPU硬件的物理核心数量。而线程 这个概念,是逻辑层的概念,而且这个逻辑层的概...

  • 回答 4

    多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程...

  • 回答 18

    这是一个非常刁钻和狡猾的问题。请记住:线程类的构造方法、静态块是被 new这个线程类所在的线程所调用的,而 run 方法里面的代码才是被线程自身所调用 的。如果说上面的说法让你感到困惑,那么我举个例子,假设 Thread2 中 new 了 Thread1,main ...

  • 回答 26

    多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度程序的运行速度可能加快在...

  • 回答 7

    同步块是更好的选择,因为它不会锁住整个对象(当然你也可以让它锁住整个对象)。同步方法会锁住整个对象,哪怕这个类中有多个不相关联的同步块,这通常会导致他们停止执行并需要等待获得这个对象上的锁。...

  • 回答 5

    单例模式是为确保一个类只有一个实例,并为整个系统提供一个全局访问点的一种模式方法。单例模式的特点:(1)、在任何情况下,单例类永远只有一个实例存在。(2)、单例需要有能力为整个系统提供这一唯一实例。...

  • 回答 5
    已采纳

    很多人都知道死锁是怎么一回事儿:线程A和线程B相互等待对方持有的锁导致程序无限死循环下去。当然也仅限于此了,问一下怎么写一个死锁的程序就不知道了,这种情况说白了就是不懂什么是死锁,懂一个理论就完事儿了,实践中碰到死锁的问题基本上是看不出来的。...

  • 回答 3

    这是一个比较偏实践的问题,这种问题我觉得挺有意义的。可以这么做:(1)获取项目的pid,jps或者ps -ef | grep java,这个前面有讲过(2)top -H -p pid,顺序不能改变这样就可以打印出当前的项目,每条线程占用CPU时间的百分比。注意这里打出的是LWP,也就...

  • 回答 4

    通过继承 Thread 类来创建线程的一般步骤如下:1. 定义一个 Thread 类的子类,重写 run() 方法,将相关逻辑实现,run() 方法就是线程要执行的业务逻辑方法;2. 创建自定义的线程子类对象;3. 调用子类实例的 start() 方法来启动线程。通过实现 Runnable 接口创...

  • 回答 4

    新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不...

  • 回答 4

    新建:就是刚使用new方法,new出来的线程;就绪:就是调用的线程的start()方法后,这时候线程处于等待CPU分配资源阶段,谁先抢的CPU资源,谁开始执行;运行:当就绪的线程被调度并获得CPU资源时,便进入运行状态,run方法定义了线程的操作和功能;阻塞:在运行状...

  • 回答 6

    通过在线程之间共享对象就可以了,然后通过wait/notify/notifyAll、await/signal/signalAll进行唤起和等待,比方说阻塞队列BlockingQueue就是为线程之间共享数据而设计的

  • 回答 11

    这个问题有值得一提的地方,就是线程安全也是有几个级别的:(1)不可变像String、Integer、Long这些,都是final类型的类,任何一个线程都改变不了它们的值,要改变除非新创建一个,因此这些不可变对象不需要任何同步手段就可以直接在多线程环境下使用(2)绝...

  • 回答 4

    两个看上去有点像的类,都在java.util.concurrent下,都可以用来表示代码运行到某个点上,二者的区别在于:(1)CyclicBarrier的某个线程运行到某个点上之后,该线程即停止运行,直到所有的线程都到达了这个点,所有线程才重新运行;CountDownLatch则不是,某...

  • 回答 5

    (1)通过平衡生产者的生产能力和消费者的消费能力来提升整个系统的运行效率,这是生产者消费者模型最重要的作用(2)解耦,这是生产者消费者模型附带的作用,解耦意味着生产者和消费者之间的联系少,联系越少越可以独自发展而不需要收到相互的制约...

没有解决我的问题,去提问