繁体   English   中英

JAVA概念中的多线程

[英]Multi-Threading in JAVA concept

 class MyThread extends Thread
    {
        public void run()
        {
            try
            {
                for(int i=0 ; i<10 ; i++)
                {
                    System.out.println("I am Lazy Thread.");
                    Thread.sleep(2000);
                }
            }
            catch (InterruptedException e)
            {
                    System.out.println("I got interrrupted.");              
            }
        }
    }
    class Test
    {
        public static void main(String[] args) 
        {
            MyThread t = new MyThread();
            t.start();        //after this line 
            t.interrupt();
            System.out.println("end of main.");
        }

    }

t.start(); t.interrupt(); 为什么先打印主末尾然后子线程语句。

根据多线程概念,它可能也是子类线程语句,但它总是首先执行主线程语句。

这背后的概念和工作程序是什么。因为它始终是执行主体优先于其他主体的结果

为什么先打印主末尾然后子线程语句。

这是因为每个线程都是独立运行的,这就是重点。

这背后的概念和工作程序是什么。因为它始终是执行主体优先于其他主体的结果。

特别是,线程启动所需的时间比完成main()方法所需的时间要长得多。

您可以减慢主线程的速度,以便更多地按照预期的方式进行操作。

public static void main(String[] args) throws InterruptedException {
        MyThread t = new MyThread();
        t.start();        //after this line 
        Thread.sleep(1);  // thread might not start in this time or might complete.
        t.interrupt();
        Thread.sleep(1);
        System.out.println("end of main.");
    }

实际上,如果CPU可以在一毫秒内执行3,000,000条指令,那么1毫秒可能太长。

正如文档所说

公共无效中断()

中断此线程。

除非始终允许当前线程中断自身,否则将一直调用此线程的checkAccess方法,这可能导致引发SecurityException。

如果在调用Object类的wait(),wait(long)或wait(long,int)方法或join(),join(long),join(long,int)方法时阻塞了此线程,sleep(long)或sleep(long,int)此类的方法,则其中断状态将被清除,并将收到InterruptedException。

如果此线程在可中断通道的I / O操作中被阻止,则该通道将被关闭,线程的中断状态将被设置,并且该线程将收到ClosedByInterruptException。

如果此线程在选择器中被阻塞,则该线程的中断状态将被设置,并且它将立即从选择操作中返回,可能具有非零值,就像调用选择器的唤醒方法一样。

如果上述条件均不成立,则将设置该线程的中断状态。

中断未激活的线程不会产生任何效果。

抛出:SecurityException-如果当前线程无法修改此线程

注意:使用线程,除非明确地同步它们,否则无法保证事情的执行顺序

用简单的语言,准备一个新线程需要大量的初始化工作。 即使主线程也需要花费自己的时间来启动,但是由于主线程已经初始化并运行,因此即使从其派生的线程处于其初始化和执行阶段,它也可以完成其执行。

t.start(); 有两个线程,一个是线程,另一个是线程。

两个线程彼此独立...:在创建子线程之前已经完成了主线程的初始化,对于CPU(Thread Scheduler:TS),它比child thread更容易处理和执行main thread child thread 如果TS用于执行子线程,则肯定要花费更多的时间。 TS内有一些算法在工作,它首先要选择哪个线程,并且每个TS总是不同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM