亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java教程中的多线程与程序和示例


任何应用程序都可以有多个进程(实例)。每个进程都可以分配为单个线程或多个线程。我们将在本教程中看到如何同时执行多个任务,并了解有关线程和线程之间同步的更多信息。

在这个 Java 多线程教程中,我们将学习:

什么是单线程?

Java 中的单线程基本上是一个轻量级和最小的处理单元。 Java 通过使用“线程类”来使用线程。

有两种类型的线程——用户线程和守护线程 (当我们要清理应用程序时使用守护线程并在后台使用)。

当应用程序首次启动时,会创建用户线程。贴出来,我们可以创建很多用户线程和守护线程。

单线程示例:

package demotest;

public class GuruThread
{
       public static void main(String[] args) {
              System.out.println("Single Thread");
       }
}

单线程的优点:

什么是 Java 中的多线程?

多线程 在 Java 中是同时执行两个或多个线程以最大限度地利用 CPU 的过程。多线程应用程序执行两个或多个并发运行的线程。因此,它在 Java 中也称为并发。每个线程彼此并行运行。多线程不分配单独的内存区域,因此它们节省内存。此外,线程之间的上下文切换需要更少的时间。

多线程示例:

package demotest;
public class GuruThread1 implements Runnable
{
       public static void main(String[] args) {
        Thread guruThread1 = new Thread("Guru1");
        Thread guruThread2 = new Thread("Guru2");
        guruThread1.start();
        guruThread2.start();
        System.out.println("Thread names are following:");
        System.out.println(guruThread1.getName());
        System.out.println(guruThread2.getName());
    }
    @Override
    public void run() {
    }
}

多线程的优点:

Java 中的线程生命周期

线程的生命周期:

<中心>

<图>

Java中的线程生命周期

线程生命周期的各个阶段如上图所示:

  1. 新的
  2. 可运行
  3. 跑步
  4. 等待中
  5. 死了
  1. 新功能: 在这个阶段,线程是使用类“线程类”创建的。它保持这个状态直到程序开始 线程。它也被称为天生线程。
  2. 可运行: 在此页面中,线程的实例是使用 start 方法调用的。将线程控制权交给调度程序以完成执行。这取决于调度程序,是否运行线程。
  3. 正在运行: 当线程开始执行时,状态变为“运行”状态。调度程序从线程池中选择一个线程,并开始在应用程序中执行。
  4. 等待: 这是线程必须等待的状态。由于应用程序中有多个线程正在运行,因此需要线程之间的同步。因此,一个线程必须等待,直到另一个线程被执行。因此,这种状态称为等待状态。
  5. 死亡: 这是线程终止时的状态。线程处于运行状态,一旦完成处理就处于“死状态”。


线程常用的一些方法有:


方法

描述
start() 这个方法启动线程的执行,JVM调用线程上的run()方法。
睡眠(int毫秒) 此方法使线程休眠,因此线程的执行将暂停提供的毫秒数,之后,线程再次开始执行。这有助于线程同步。
getName() 它返回线程的名称。
setPriority(int newpriority) 改变线程的优先级。
产量() 它会导致当前线程暂停并执行其他线程。

示例: 在这个 Java 多线程程序示例中,我们将创建一个线程并探索可用于线程的内置方法。

package demotest;
public class thread_example1 implements Runnable {
    @Override
    public void run() {
    }
    public static void main(String[] args) {
        Thread guruthread1 = new Thread();
        guruthread1.start();
        try {
            guruthread1.sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        guruthread1.setPriority(1);
        int gurupriority = guruthread1.getPriority();
        System.out.println(gurupriority);
        System.out.println("Thread Running");
  }
}

代码解释:

当你执行上面的代码时,你会得到如下输出:

输出:

5是Thread的优先级,Thread Running是我们代码输出的文本。

Java 线程同步

在多线程中,存在程序的异步行为。如果一个线程正在写入一些数据,而另一个线程同时正在读取数据,可能会在应用程序中造成不一致。

当需要两个或多个线程访问共享资源时,就采用同步的方式。

Java 提供了同步方法来实现同步行为。

在这种方法中,一旦线程到达同步块内部,则没有其他线程可以在同一对象上调用该方法。所有线程都必须等到该线程完成同步块并从中退出。

这样,同步有助于多线程应用程序。一个线程必须等到其他线程执行完毕才允许其他线程执行。

可以写成如下形式:

Synchronized(object)
{  
        //Block of statements to be synchronized
}

Java 多线程示例

在这个多线程 Java 示例中,我们将采用两个线程并获取线程的名称。

示例 1:

GuruThread1.java
package demotest;
public class GuruThread1 implements Runnable{

    /**
     * @param args
     */
    public static void main(String[] args) {
        Thread guruThread1 = new Thread("Guru1");
        Thread guruThread2 = new Thread("Guru2");
        guruThread1.start();
        guruThread2.start();
        System.out.println("Thread names are following:");
        System.out.println(guruThread1.getName());
        System.out.println(guruThread2.getName());
    }
    @Override
    public void run() {
    }
}

代码解释:

当你执行上面的代码时,你会得到如下输出:

输出:

线程名称在这里输出为

示例 2:

在这个 Java 中的多线程示例中,我们将学习重写可运行接口的 run() 和 start() 方法,并创建该类的两个线程并相应地运行它们。

另外,我们要上两节课,

package demotest;
public class GuruThread2 {
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  GuruThread3 threadguru1 = new GuruThread3("guru1");
  threadguru1.start();
  GuruThread3 threadguru2 = new GuruThread3("guru2");
  threadguru2.start();
 }
}
class GuruThread3 implements Runnable {
 Thread guruthread;
 private String guruname;
 GuruThread3(String name) {
  guruname = name;
 }
 @Override
 public void run() {
  System.out.println("Thread running" + guruname);
  for (int i = 0; i < 4; i++) {
   System.out.println(i);
   System.out.println(guruname);
   try {
    Thread.sleep(1000);
   } catch (InterruptedException e) {
    System.out.println("Thread has been interrupted");
   }
  }
 }
 public void start() {
  System.out.println("Thread started");
  if (guruthread == null) {
   guruthread = new Thread(this, guruname);
   guruthread.start();
  }
 }
}

代码解释:

当你执行上面的代码时,你会得到以下输出:

输出

因此有两个线程,我们会收到两次消息“线程已启动”。

我们得到线程的名称,因为我们已经输出了它们。

它进入 for 循环,我们打印计数器和线程名称,计数器从 0 开始。

循环执行了 3 次,在这期间线程休眠了 1000 毫秒。

因此,首先,我们得到 guru1,然后是 guru2,然后是 guru2,因为线程在这里休眠 1000 毫秒,然后下一个 guru1 和 guru1,线程休眠 1000 毫秒,所以我们得到 guru2,然后是 guru1。

总结

在本教程中,我们看到了 Java 中的多线程应用程序以及如何在 Java 中使用单线程和多线程。


java

  1. Java Hello World 程序
  2. 带有程序示例的 C++ 函数
  3. C# 集合教程与示例
  4. Java String indexOf() 方法与子字符串和示例
  5. Java String charAt() 方法及示例
  6. Java String compareTo() 方法:如何与示例一起使用
  7. Java中的构造函数重载:什么是&程序示例
  8. 检查质数的Java程序
  9. Java中的插入排序算法及程序示例
  10. Java程序中的选择排序与示例
  11. C++ 多线程
  12. Java 9 - 尝试资源改进