java多线程的实现方法

java虚拟机允许应用程序并发地运行多个线程。在java语言中,多线程的实现一般有以下三种方法:

1)实现Runnable接口,并实现该接口的run()方法

class MyThread implements Runnable
{
  public void run(){
     System.out.println("Thread Body");
   }
}

public class Test
{
  public static void main(String[] args)
 {
   MyThread thread = new MyThread();
   Thread t = new Thread();
   t.start();   //启动线程
  }
}

2)继承Thread类,重写run方法

class MyThread extends Thread
{
 public void run()
 {
   System.out.println("Thread body");
  }
}

public class Test
{
 public static void main(String[] args)
 {
  MyThread thread = new MyThread();
  thread.start();
 }
}

3)实现Callable接口,重写call()方法

Callable对象实际是属于Executor框架中的功能类,Callable接口与Runnable接口类似,但是提供了比Runnable更强大的功能,主要表现在以下三点:

(1)Callable可以在任务结束后提供一个返回值,Runnable无法提供这个功能。

(2)Callable中的call()方法可以抛出异常,而Runnable的run()方法不能抛出异常。

(3)运行Callable可以拿到一个Future对象,Future对象表示异步计算的结果。它提供了检查计算是否完成的方法。由于线程属于异步计算模型,所以无法从其他线程中得到方法的返回值,在这种情况下,就可以使用Future来监视目标线程调用call()方法的情况,当调用Future的get()方法获取结果时,当前线程就会阻塞,直到call()方法结束返回结果。

import java.util.concurrent.*;
public class CallableAndFuture
{
 public static class CallableTest implements Callable<String>
 {
  public String call() throws Exception
  {
    return "Hello World";
  }
 }

public static void main(String[] args)
 {
   ExecutorService threadPool = Executors.newSingleThreadExecutor();
   Future<String> future = threadPool.submit(new CallableTest);
   try{
      System.out.println("waiting thread to finish");
      System.out.println(future.get());
   }
   catch(Exception e)
    {
      e.printStackTrace();
     }
 }
}
时间: 2024-10-14 05:24:38

java多线程的实现方法的相关文章

Java多线程死锁避免方法

一.什么是死锁当两个或两个以上的线程在执行过程中,因为争夺资源而造成的一种相互等待的状态,由于存在一种环路的锁依赖关系而永远地等待下去,如果没有外部干涉,他们将永远等待下去,此时的这个状态称之为死锁.经典的 "哲学家进餐" 问题很好地描述了死锁状况:5个哲学家去吃中餐,坐在一张圆桌旁,他们有5根筷子(而不是5双),并且每两个人中间放一根筷子,哲学家们要么在思考,要么在进餐,每个人都需要一双筷子才能吃到东西,并在吃完后将筷子放回原处继续思考,有些筷子管理算法 (1) 能够使每个人都能相对

Java多线程同步的方法

一 synchronized关键字 1.synchronized实现原理: ---基于对象监视器(锁) java中所有对象都自动含有单一的锁,JVM负责跟踪对象被加锁的次数.如果一个对象被解锁,其计数变为0.在任务(线程)第一次给对象加锁的时候, 计数变为1.每当这个相同的任务(线程)在此对象上获得锁时,计数会递增.只有首先获得锁的任务(线程)才能继续获取该对象上的多个锁.每当任务离开时,计数递减,当计数为0的时候,锁被完全释放. Java中每个对象或者类都有一把锁与之相关联,对于对象来说,监视

Java 多线程的实现方法

package com.jckb; /**多线程实现的两种方法 * * @author gx * */ public class Test2 { public static void main(String[] args) { Mythread m = new Mythread(); m.start();// 不能直接调用run方法 // m.run();//是方法调用,不是线程的启动 Thread t = new Thread(new Mythread2()); t.start(); } }

Java多线程之~~~~synchronized 方法

在多线程开发中,总会遇到多个在不同线程中的方法操作同一个数据,这样在不同线程中操作这个数据不同的顺序 或者时机会导致各种不同的现象发生,以至于不能实现你预期的效果,不能实现一致性,这时候就可以使用 synchronized关键字对一个方法来说,这个synchronized能保证所有调用这个方法的线程只有一个正在操作这个方法, 不会出现同时多个线程进入这个方法的情况,下面我们来一个例子说明这个情况. 首先是一个Account类,这个类模拟账户,提供增加工资和减少工资的方法,当然,这个方法是被syn

Java多线程的创建方法

Java 线程类也是一个 object 类,它的实例都继承自java.lang.Thread 或其子类. 可以用如下方式用 java 中创建一个线程,执行该线程可以调用该线程的 start()方法: Tread thread = new Thread(); thread.start(); 在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了. 编写线程运行时执行的代码有两种方式:一种是创建Thread 子类的一个实例并重写 run 方法,第二种是创建类的时候实现 Runna

Java多线程中join方法详解

join()方法用于让当前执行线程等待join线程执行结束.其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待. join()方法部分实现细节 while(isAlive()) { wait(0) } 其中wait(0)表示永远等待下去. join线程中止后,线程的this.notifyAll()方法会被调用,调用notifyAll()是在JVM里调用的所有在JDK中看不到,大家可以看JVM源码 示例程序: public calss ThreadTest{ pu

java 多线程-常用其他方法

常用其他方法isAlive() 判断线程是否还活着,即是否终止setName() 给线程起名,代理角色getName() 获取线程名字 public class n { public static void main(String[]args) throws InterruptedException { System.out.println(Thread.currentThread().isAlive()); //设置名字,真实角色(面向对象方式设置)和代理角色(线程的默认名字0到10) tes

Java多线程的一些方法

首先介绍线程的五种状态: 新生态:New Thread() 就绪态:准备抢CPU时间片 运行态:抢到了CPU时间片 阻塞态:放弃已经抢到的CPU时间片,且暂时不参与争抢 死亡态:Run运行完了之后 接下来介绍三种方法:线程的阻塞,线程的优先级设置,线程的礼让 1 public class MutliThreadDemo4 { 2 public static void main(String[] args) { 3 threadBlock(); 4 //threadPriority(); 5 //

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

java 多线程的实现方法 可以通过继承Thread类和实现Runnable接口来实现,而Thread类实际上实现了Runnable接口 ,两种创建线程的方法性质是一样的,并没有什么本质区别 Thread类 1. 创建MyThread 类并继承Thread类 public class MyThread extends Thread{} 2. 在MyThread类中重写 Thread类的run()方法,值得一提的是Thread类的run()方法是实现了Runnable接口,所以继承Thread类和