[英]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.