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 如何实现多线程的主要内容,如果未能解决你的问题,请参考以下文章