Java中的线程

Kev*_*vin 12 java multithreading

今天我在接受采访时谈到了Java中的Thread概念?问题是......

  1. 什么是线程?
  2. 我们为什么要选择线程?
  3. 线程上的实时示例.
  4. 我们可以在Spring框架服务类中创建线程吗?
  5. 可以flex一个线程吗?

除了Thread的定义之外,我没有回答任何问题,我也是从互联网上学到的.

任何人都可以清楚地向我解释这个.

更新:

线程和普通java类之间有什么区别.为什么我们需要线程...我可以在线程中执行业务逻辑.我可以在Threads中调用不同的类方法.

Saj*_*ani 12

要创建线程,请创建一个扩展Thread类的新类,并实例化该类.扩展类必须覆盖run()方法并调用start()方法以开始执行线程.

在run()中,您将定义构成新线程的代码.重要的是要理解run()可以调用其他方法,使用其他类并像主线程一样声明变量.唯一的区别是run()为程序中另一个并发执行线程建立入口点.这将在run()返回时结束.

public class MyThread extends Thread {
    private final String name;

    public MyThread(String name) {
        this.name = name;
    }

    public void run() {
        try {
            for (; ; ) {
                System.out.println(name);
                Thread.sleep(1000);
            }
        } catch (InterruptedException e) {
            System.out.println("sleep interrupted");
        }
    }

    public static void main(String[] args) {
        Thread t1 = new MyThread("First Thread");
        Thread t2 = new MyThread("Second Thread");
        t1.start();
        t2.start();
    }
}
Run Code Online (Sandbox Code Playgroud)

输出屏幕:

First Thread
Second Thread
First Thread
Second Thread
First Thread
Run Code Online (Sandbox Code Playgroud)

并看到这个:

http://www.javaworld.com/javaworld/jw-04-1996/jw-04-threads.html

对于Spring,您可以使用线程池:

http://static.springsource.org/spring/docs/2.0.x/reference/scheduling.html


roo*_*ler 6

多线程是一种Java功能,允许并发执行程序的两个或多个部分,以最大限度地利用CPU.这种程序的每个部分都称为线程.所以,

线程是进程中的轻量级进程.

可以使用两种机制创建线程:

  1. 扩展Thread类
  2. 实现Runnable接口

通过扩展Thread类创建线程

我们创建了一个扩展java.lang.Thread类的类.该类重写该类中run()可用的方法Thread.线程在run()方法内部开始.我们创建一个新类的对象,并调用start()方法来开始执行一个线程.Start()调用对象run()上的方法Thread.

class MultithreadingDemo extends Thread{
public void run()    {
    try {   // Displaying the thread that is running
        System.out.println ("Thread " + Thread.currentThread().getId() 
                                + " is running"); 
        }
        catch (Exception e){   // Throwing an exception
            System.out.println ("Exception is caught");
        }
    }
} 
public class Multithread{
    public static void main(String[] args)    {
        int n = 8; // Number of threads
        for (int i=0; i<8; i++)        {
            MultithreadingDemo object = new MultithreadingDemo();
            object.start();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

通过实现Runnable接口创建线程

我们创建了一个实现java.lang.Runnable接口和覆盖run()方法的新类.然后我们start()在这个对象上实例化一个Thread对象并调用方法.

class MultithreadingDemo implements Runnable{
public void run()    {
    try   {     // Displaying the thread that is running
        System.out.println ("Thread " +  Thread.currentThread().getId() +
                            " is running");

    }
    catch (Exception e)   {     // Throwing an exception
        System.out.println ("Exception is caught");
    }
    }
} 
class Multithread{
    public static void main(String[] args)    {
        int n = 8; // Number of threads
        for (int i=0; i<8; i++)        {
            Thread object = new Thread(new MultithreadingDemo());
            object.start();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

线程类与可运行接口

  1. 如果我们扩展Thread类,我们的类不能扩展任何其他类,因为Java不支持多重继承.但是,如果我们实现Runnable接口,我们的类仍然可以扩展其他基类.

  2. 我们可以通过扩展Thread类来实现线程的基本功能,因为它提供了一些内置的方法,如yield(),interrupt()等在Runnable接口中不可用.