精华内容
下载资源
问答
  • 定义线程执行体的方法

    千次阅读 2021-08-02 17:53:52
    以下哪个方法用于定义线程执行体? ( ) A.start() B.init() C.run() D.synchronized() 答案:C start()是线程开始执行 init()是初始化 run()是定义线程内部执行方法 synchronized()是处理多线程同步用的

    以下哪个方法用于定义线程的执行体? ( )

    A.start()
    B.init()
    C.run()
    D.synchronized()

    答案:C
    start()是线程开始执行
    init()是初始化
    run()是定义线程内部执行的方法
    synchronized()是处理多线程同步用的

    展开全文
  • 该问题大概有3种方法:1.notify、wait方法,Java中的唤醒与等待方法,关键为synchronized代码块,参数线程间应相同,也常用Object作为参数,示例如下。package com.thread_lc;class MyThread1 implements Runnable{...

    该问题大概有3种方法:

    1.notify、wait方法,Java中的唤醒与等待方法,关键为synchronized代码块,参数线程间应相同,也常用Object作为参数,示例如下。

    package com.thread_lc;

    class MyThread1 implements Runnable

    {

    public int i = 10;

    @Override

    public void run ()

    {

    Thread currThread = Thread.currentThread ();

    synchronized (currThread)

    {

    ++i;

    System.out.println (this.getClass ().getName () + " i = " + i);

    currThread.notify ();

    }

    }

    }

    package com.thread_lc;

    class MyThread2 implements Runnable

    {

    @Override

    public void run ()

    {

    Thread currThread = Thread.currentThread ();

    synchronized (currThread)

    {

    while ("t1".equals (currThread.getName ()))

    {

    <
    展开全文
  • ExecutorService——shutdown方法和awaitTermination方法shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorService停止接收新的任务并且等待已经提交的任务(包含提交正在执行和提交未执行)执行...

    ExecutorService——shutdown方法和awaitTermination方法

    shutdown方法:平滑的关闭ExecutorService,当此方法被调用时,ExecutorService停止接收新的任务并且等待已经提交的任务(包含提交正在执行和提交未执行)执行完成。当所有提交任务执行完毕,线程池即被关闭。

    awaitTermination方法:接收人timeout和TimeUnit两个参数,用于设定超时时间及单位。当等待超过设定时间时,会监测ExecutorService是否已经关闭,若关闭则返回true,否则返回false。一般情况下会和shutdown方法组合使用。

    long startTime = System.currenttime();

    ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

    for (int i = 0; i < 10; i++) {

    final int index = i;

    try {

    Thread.sleep(index * 1000);

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    cachedThreadPool.execute(new Runnable() {

    @Override

    public void run() {

    System.out.println(index);

    }

    });

    }

    cachedThreadPool.shutdown();

    while(!cachedThreadPool.awaitTermination(1,TimeUnit.SECONDS)){

    System.out.println("线程池未关闭")

    }

    System.out.println(System.currenttime()-startTime);

    展开全文
  • 新写自己的Threading类class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断def __init__(self,func = ""):#输入待执行函数名 我执行的函数没有参数就没有加args输入了...

    新写自己的Threading类

    class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断

    def __init__(self,func = ""):#输入待执行函数名 我执行的函数没有参数就没有加args输入了

    threading.Thread.__init__(self)

    self.func = func

    self.result = 1#未完成为1 标志位

    # 调用start自动执行的函数

    def run(self):

    self.result = self.func()

    self.result = 0#完成返回0

    然后执行

    class MyThread(threading.Thread):#我的Thread类 判断流程结束没 用于os shell命令是否执行判断

    def __init__(self,func = ""):#输入待执行函数名 我执行的函数没有参数就没有加args输入了

    threading.Thread.__init__(self)

    self.func = func

    self.result = 1#未完成为1 标志位

    # 调用start自动执行的函数

    def run(self):

    self.result = self.func()

    self.result = 0#完成返回0

    这样就可以判断os.sysytem里语句是否执行完成是否

    补充知识:python的threading.Thread线程的start、run、join、setDaemon

    Pycharm整体看下Thread类的内容:模拟的是Java的线程模型

    表示方法method,上面的锁头表示这个是类内部的方法,从方法名字命名规范可以看出,都是_和__开头的,一个下划线表示是子类可以继承,两个下划线表示是只有Thread内部可以访问,子类都不可以访问。

    表示property,可以使用类直接访问:Thread._block

    表示field,就是self.x定义的东东

    表示变量variable

    name/getName/setName是线程名字有关的;

    isDaemon是否是守护进程

    setDaemon设置为守护进程,如果把调用线程设置为守护线程,那么等调用线程结束后,被调用的子线程结束与否都会随着守护线程结束

    isAlive线程是否是活动状态

    start方法开启一个新线程。把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法。

    run线程实际在运行的内容,可以被子类继承和重写overide。

    join阻塞调用它的线程,直到等待被调用的线程运行结束,其实就变成了单线程。参数timeout的作用是,当前线程等待被调用的子线程的时间,如果时间到了,不管子线程是否结束,当前线程都进入就绪状态,重新等待CPU调度。

    Join方法的Java示例:

    新建一个Thread类,重写run()方法:

    public class MyThread extends Thread {

    @Override

    public void run() {

    System.out.println("子线程执行完毕");

    }

    }

    新建测试类,测试Join()方法:

    public class TestThread {

    public static void main(String[] args) {

    //循环五次

    for (int i = 0; i < 5; i++) {

    MyThread thread = new MyThread();

    //启动线程

    thread.start();

    try {

    //调用join()方法

    thread.join();

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    System.out.println("主线程执行完毕");

    System.out.println("~~~~~~~~~~~~~~~");

    }

    }

    }

    输出结果如下:

    子线程执行完毕

    主线程执行完毕

    ~~~~~~~~~~~~~~~

    子线程执行完毕

    主线程执行完毕

    ~~~~~~~~~~~~~~~

    子线程执行完毕

    主线程执行完毕

    ~~~~~~~~~~~~~~~

    子线程执行完毕

    主线程执行完毕

    ~~~~~~~~~~~~~~~

    子线程执行完毕

    主线程执行完毕

    ~~~~~~~~~~~~~~~

    结果分析: 子线程每次都在主线程之前执行完毕,即子线程会在主线程之前执行。

    什么时候用join()方法?

    在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()方法了。

    用start方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码。通过调用Thread类的start()方法来启动一个线程,这时此线程处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行run()方法,这里方法 run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止。

    run()方法只是类的一个普通方法而已,如果直接调用Run方法,程序中依然只有主线程这一个线程,其程序执行路径还是只有一条,还是要顺序执行,还是要等待run方法体执行完毕后才可继续执行下面的代码,这样就没有达到写线程的目的。

    总结:调用start方法方可启动线程,而run方法只是thread的一个普通方法调用,还是在主线程里执行。把需要并行处理的代码放在run()方法中,start()方法启动线程将自动调用 run()方法

    可见join和setDaemon作用是相反的,一个是等待子线程结束,一个是不等到子线程结束,有可能把子线程强制结束。如果两个都不设置的时候,那么主线程和子线程各自运行各自的,互不干扰,谁结束都不会影响另一个运行情况:见https://www.jb51.net/article/185872.htm示例

    以上这篇判断Threading.start新线程是否执行完毕的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

    展开全文
  • 先说结论:main方法启动后,jvm会开启多个守护线程,但main方法中的代码是被单线程执行的。 上代码: 下面这段代码通过java提供的线程管理类ThreadMXBean中的dumpAllThreads方法返回所有活动线程的线程信息,并打印...
  • 一个多线程的题:定义三个线程ID分别为ABC,每个线程打印10遍自己的线程ID,按ABCABC……的顺序进行打印输出。我的解法:from threading import Thread, Lock# 由_acquire解锁执行后释放_release锁def _print(_id: ...
  • 执行java方法

    2021-03-09 18:32:50
    Java虚拟机的主要任务是加载class文件并且执行其中的字节码。Java 虚拟机包含一个类装载器(class loader)。它可以从程序和API中加载class文件。 Java API中只有程序执行时需要的部些类...文章爆米花99582018-07-...
  • 自定义一个 Thread 类在自定义的 Thread 上添加一个 boolean 成员用于判断例子public class Main{public static void main(String[] args){new MyThread(new Runnable(){@Overridepublic void run(){test();...
  • 这篇文章主要介绍了Java线程死锁实例及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下1、死锁的定义所谓死锁是指多个线程因竞争资源而造成的一种僵局...
  • java多线程试题

    2020-12-30 17:27:42
    狂翔IT工作室多线程试程一.选择题1.下列说法中,正确的一项是() AA.单处理机的计算机上,2个纯种一官半职直不能并发执行B.单处理机的计算机上,2个线程实际能够并发执行C....下列哪个一个操作不能使线程从等待阻...
  • sem_wait() 会阻塞当前线程 sem_trywait() 返回错误而不是阻塞调用 sem_timedwait() sem_timedwait的abs_timeout参数指定了调用应该阻塞的时间限制 信号量 信号量 (semaphore) 是一种轻量的同步原件,用于制约对...
  • Python 线程

    2020-12-29 15:38:51
    线程,有时被称为轻量进程,是程序执行流的最小单元。一个标准的线程线程ID,当前指令指针(PC),寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程不拥有私有的系统资源,但...
  • java多线程试题_答案

    千次阅读 2021-03-07 14:26:37
    线程一.选择题1.下列说法中错误的一项是(A)A.线程就是程序B.线程是一个程序的单个执行流B.多线程是指一个程序的多个执行流 D.多线程用于实现并发2.下列哪个一个操作不能使线程从等待...下列哪个方法可以使线程从...
  • 关于如何中断线程执行,又学到一项新技能!!
  • 面试题:有A,B,C三个线程,如何保证三个线程同时执行?如何在并发情况下保证三个线程依次执行?如何保证二个线程有序交错进行?面试题:有A,B,C三个线程,如何保证三个线程同时执行?如何在并发情况下保证三个线程依次...
  • Java使用多线程异步执行批量更新操作

    千次阅读 热门讨论 2021-01-11 00:16:32
    写在前面: 相信不少开发者在遇到项目对数据进行批量操作的时候,都会有不少的烦恼,尤其是针对数据量极大的情况下,效率问题就直接提上了...对流程进行控制,控制线程执行顺序。 按照指定大小拆分集合的工具类 import
  • python多线程两种调用方式

    千次阅读 2021-03-18 11:34:20
    class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)Thread 的构造方法中,最重要的参数是 target,所以我们需要将一个 callable 对象赋值给它,线程才能正常运行。...
  • 程序、进程和线程:程序是一段静态的代码,它是应用程序执行的蓝本。进程是程序的一次动态执行过程,它对应了从代码加载、执行执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比...
  • Java多线程

    2021-02-28 06:03:31
    正在进行中的程序一个程序就是一个进程,而一个程序中的多个任务则被称为线程,进程其实就是一个静态的概念2、线程(控制单元/执行路径)就是进程中一个负责程序执行的控制单元(执行路径)一个线程中可以执行多个路径,...
  • Java 多线程(一)

    2021-03-14 19:48:15
    1. 多线程使用方法使用多线程,绝大部分情况都是通过如下两种方式实现的,即继承Thread类或者实现Runnable接口。以下对两种方式分别进行介绍并比较。1.1 使用Thread类实现多线程自定义线程类要继承 Thread 类,并在 ...
  • 此前小编给大家介绍了进程间通信的方法,于是一些伙伴又好奇线程间的通信及同步方法,没关系,下面小编就继续给大家科普下线程间通信及同步的方法线程间通信及同步方法介绍:一、线程间的通信方式1、使用全局变量...
  • python中使用多线程处理程序,会比一步步的处理节约很多时间,而且通过创建并继承Python的Thread类,重写run()方法,通过自定义的线程类来创建线程,本文介绍python多线程Thread类定义和如何自定义线程类的过程。...
  • 两个异步线程 处理时长不同,先放入阻塞线程池内,需要等执行慢的那个线程任务执行完毕。 //1.创建线程名称 ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-%d").build...
  • 在使用pyqt5的过程中,会存在界面卡死的现象,为了优化改善,可以利用多线程来解决此类问题。可以实现信号与槽在多个线程中的相互传递数据。 用法很简单,创建一个进程类,不同触发时刻分别调用即可。 参考案例一:...
  • java中的多线程是一个同时执行多个线程的过程。线程基本上是一个轻量级的子进程,是最小的处理单元。...Java多线程主要用于游戏,动画等Java多线程的优点1)它不会阻止用户,因为线程是独立的,您可以同时执行多个操...
  • 线程启动调用start方法 B. 线程的主体是run方法 C. 线程运行中调用sleep方法可以进入阻塞状态 D. 定义线程只能通过定义类继承Thread类的方法更多相关问题等截面直杆受轴向拉力F作用发生拉伸变形。已知横截面面积为A...
  • 在头文件 threads.h 中,定义和...函数 thrd_create()用于创建并开始执行一个新线程。函数 thrd_create()的其中一个参数为在新线程中需要被执行的函数 thrd_create()的其中一个参数为在新线程中需要被执行的函数。th...
  • 线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其 他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会释放对象锁。 sleep() 使当前线程进入阻塞状态,在指定时间内不会执行 wait...
  • 线程用于实现并发下列哪个一个操作不能使线程从等待阻塞状态进入对象阻塞状态(D)等待阴塞状态下的线程被notify()唤等待阻塞状态下的纯种被interrput()中断等待时间到等待阻塞状态下的线程调用wait()方法下列哪个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 849,006
精华内容 339,602
关键字:

哪个方法用于开始线程的执行