java 如何实现多线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 如何实现多线程相关的知识,希望对你有一定的参考价值。

java中多线程的实现方式有两种,一种是继承java.lang.Thread类,另一种是实现java.lang.Runnable接口。下面是两种方式的简单代码。继承Thread类方式:import java.lang.Thread; //用集成Thread类方式实现多线程。 public class Test public static void main(String arg[]) T t1=new T(); T t2=new T(); //更改新线程名称 t1.setName("t1"); t2.setName("t2"); //启动线程 t1.start(); t2.start(); class T extends Thread //重写run()方法 public void run() System.out.println(this.getName()); 输出结果为:t1t2实现Runnable接口方式:在使用Runnable接口时需要建立一个Thread实例。因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例。import java.lang.*; //用实现Runnable接口的方式实现多线程。 public class Test public static void main(String arg[]) T t1=new T(); T t2=new T(); //一定要实例化Thread对象,将实现Runnable接口的对象作为参数传入。 Thread th1=new Thread(t1,"t1"); Thread th2=new Thread(t2,"t2"); //启动线程 th1.start(); th2.start(); class T implements Runnable //重写run()方法 public void run() System.out.println(Thread.currentThread().getName()); 输出结果为:t1t2public void run()方法是JAVA中线程的执行体方法,所有线程的操作都是从run方法开始,有点类似于main()方法,即主线程。 参考技术A 线程间的通信方式
同步
这里讲的同步是指多个线程通过synchronized关键字这种方式来实现线程间的通信。
参考示例:
public class MyObject
synchronized public void methodA()
//do something....

synchronized public void methodB()
//do some other thing


public class ThreadA extends Thread
private MyObject object;
//省略构造方法
@Override
public void run()
super.run();
object.methodA();


public class ThreadB extends Thread
private MyObject object;
//省略构造方法
@Override
public void run()
super.run();
object.methodB();


public class Run
public static void main(String[] args)
MyObject object = new MyObject();
//线程A与线程B 持有的是同一个对象:object
ThreadA a = new ThreadA(object);
ThreadB b = new ThreadB(object);
a.start();
b.start();


由于线程A和线程B持有同一个MyObject类的对象object,尽管这两个线程需要调用不同的方法,但是它们是同步执行的,比如:线程B需要等待线程A执行完了methodA()方法之后,它才能执行methodB()方法。这样,线程A和线程B就实现了 通信。
这种方式,本质上就是“共享内存”式的通信。多个线程需要访问同一个共享变量,谁拿到了锁(获得了访问权限),谁就可以执行。

11.2-全栈Java笔记:Java中如何实现多线程

JAVA中使用多线程非常简单,我们先学习如何创建和使用线程,然后结合案例再深入剖析线程的特性。

通过继承Thread类实现多线程

继承Thread类实现多线程的步骤:

1. Java中负责线程的这个功能的是java.lang.Thread 这个类

2. 可以通过创建 Thread 的实例来创建新的线程。

3.  每个线程都是通过某个特定Thread对象所对应的方法run( )来完成其操作的,方法run( )称为线程体。

4.   通过调用Thead类的start()方法来启动一个线程。

【示例1】继承Thread类实现多线程

public class   TestThread extends   Thread {

    public void   run() {

       for(int   i=0;i<100;i++){

           System.out.println(this.getName()+":"+i);

       }

    }

 

    public static void   main(String[] args) {

       TestThread thread1 = new   TestThread();

       thread1.start();

       TestThread thread2 = new   TestThread();

       thread2.start();

    }

}

示例1 运行效果图

这种方式的缺点:那就是如果我们的类已经从一个类继承(如小程序必须继承自 Applet 类),则无法再继承 Thread 类。

通过Runnable接口实现多线程

在开发中,我们更多的是通过Runnable接口实现多线程。这种方式的优点是:

可以同时实现继承。实现Runnable接口方式要通用一些。

【示例2】通过Runnable接口实现多线程

public class   TestThread2 implements   Runnable {

   

    public void   run() {

       for(int   i=0;i<100;i++){

           System.out.println(Thread.currentThread().getName()+":"+i);

       }

    }

   

    public static void   main(String[] args) {

       Thread thread1 = new   Thread(new TestThread2());

       thread1.start();

       Thread thread2 = new   Thread(new TestThread2());

       thread2.start();

    }

}

执行结果与通过Thread创建线程,类似。




「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。


 笔记包含从浅入深的六大部分:

 A-Java入门阶段

 B-数据库从入门到精通

 C-手刃移动前端和Web前端

 D-J2EE从了解到实战

 E-Java高级框架精解

 F-Linux和Hadoop 




本文出自 “12931675” 博客,请务必保留此出处http://12941675.blog.51cto.com/12931675/1944634

以上是关于java 如何实现多线程的主要内容,如果未能解决你的问题,请参考以下文章

java多线程有几种实现方法?线程之间如何同步

面试官:Java多线程有哪几种实现方式如何实现?

如何实现springMVC的多线程并发?

如何实现springMVC的多线程并发?

java多线程如何实现特定线程读取磁盘上特定标识的文件

新兵日记--java多线程学习  --如何创建线程