Java为多线程编程提供了内置支持。多线程程序包含两个或多个可以同时运行的部分。这种程序的每个部分都称为一个线程, 并且每个线程都定义了单独的执行路径。
主线程
当Java程序启动时, 一个线程立即开始运行。这通常称为主要程序的线程, 因为它是程序开始时执行的线程。
特性:
- 它是从中产生其他"子"线程的线程。
- 通常, 它必须是完成执行的最后一个线程, 因为它执行各种关闭操作
流程图 :
如何控制主线程?
启动我们的程序时自动创建主线程。为了控制它, 我们必须获得对其的引用。这可以通过调用方法来完成currentThread()在Thread类中存在。此方法返回对其调用的线程的引用。 Main线程的默认优先级为5, 所有其余用户线程的优先级将从父级继承到子级。
// Java program to control the Main Thread
public class Test extends Thread
{
public static void main(String[] args)
{
// getting reference to Main thread
Thread t = Thread.currentThread();
// getting name of Main thread
System.out.println( "Current thread: " + t.getName());
// changing the name of Main thread
t.setName( "Geeks" );
System.out.println( "After name change: " + t.getName());
// getting priority of Main thread
System.out.println( "Main thread priority: " + t.getPriority());
// setting priority of Main thread to MAX(10)
t.setPriority(MAX_PRIORITY);
System.out.println( "Main thread new priority: " + t.getPriority());
for ( int i = 0 ; i < 5 ; i++)
{
System.out.println( "Main thread" );
}
// Main thread creating a child thread
ChildThread ct = new ChildThread();
// getting priority of child thread
// which will be inherited from Main thread
// as it is created by Main thread
System.out.println( "Child thread priority: " + ct.getPriority());
// setting priority of Main thread to MIN(1)
ct.setPriority(MIN_PRIORITY);
System.out.println( "Child thread new priority: " + ct.getPriority());
// starting child thread
ct.start();
}
}
// Child Thread class
class ChildThread extends Thread
{
@Override
public void run()
{
for ( int i = 0 ; i < 5 ; i++)
{
System.out.println( "Child thread" );
}
}
}
输出如下:
Current thread: main
After name change: Geeks
Main thread priority: 5
Main thread new priority: 10
Main thread
Main thread
Main thread
Main thread
Main thread
Child thread priority: 10
Child thread new priority: 1
Child thread
Child thread
Child thread
Child thread
Child thread
Java中main()方法和主线程之间的关系
对于每个程序, 将通过以下方式创建一个主线程虚拟机(Java虚拟机)。 " Main"线程首先验证main()方法的存在, 然后初始化该类。请注意, 从JDK 6开始, main()方法在独立的Java应用程序中是必需的。
使用主线程(仅单线程)进行死锁
我们可以仅使用Main线程即仅使用单个线程来创建死锁。以下Java程序演示了这一点。
// Java program to demonstrate deadlock
// using Main thread
public class Test
{
public static void main(String[] args)
{
try
{
System.out.println( "Entering into Deadlock" );
Thread.currentThread().join();
// the following statement will never execute
System.out.println( "This statement will never execute" );
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
输出如下:
Entering into Deadlock
说明:
语句" Thread.currentThread()。join()"将告诉主线程等待该线程死亡(即等待自身)。因此, 主线程等待自身死亡, 这只是一个死锁。
相关文章: Java中的守护程序线程.
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。