java多线程的3种写法

1.Thread

/**
 *
 */
package testJava2.thread;

/**
 * @author xxx.sjtu
 * @function
 * @date 2017年5月17日
 * @version
 */
public class FirstThreadTest extends Thread {
    int i = 0;

    public FirstThreadTest(int i) {
        super();
        this.i = i;
    }

    public FirstThreadTest() {
        super();
        // TODO Auto-generated constructor stub
    }

    public FirstThreadTest(Runnable target, String name) {
        super(target, name);
        // TODO Auto-generated constructor stub
    }

    public FirstThreadTest(Runnable target) {
        super(target);
        // TODO Auto-generated constructor stub
    }

    public FirstThreadTest(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    public FirstThreadTest(ThreadGroup group, Runnable target, String name,
            long stackSize) {
        super(group, target, name, stackSize);
        // TODO Auto-generated constructor stub
    }

    public FirstThreadTest(ThreadGroup group, Runnable target, String name) {
        super(group, target, name);
        // TODO Auto-generated constructor stub
    }

    public FirstThreadTest(ThreadGroup group, Runnable target) {
        super(group, target);
        // TODO Auto-generated constructor stub
    }

    public FirstThreadTest(ThreadGroup group, String name) {
        super(group, name);
        // TODO Auto-generated constructor stub
    }

    // 重写run方法,run方法的方法体就是现场执行体
    public void run() {
        //当前线程: this
        System.out.println(this.getName() + "  " + i);
    }

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
        new FirstThreadTest(888).start();
    }
}

2.Runnable

/**
 *
 */
package testJava2.thread;

/**
 * @author xxx.sjtu
 * @function
 * @date 2017年5月17日
 * @version
 */
public class RunnableThreadTest implements Runnable {

    private int i;

    public RunnableThreadTest() {
        super();
        // TODO Auto-generated constructor stub
    }

    public RunnableThreadTest(int i) {
        super();
        this.i = i;
    }

    @Override
    public void run() {
        //当前线程: Thread.currentThread()
        System.out.println(Thread.currentThread().getName() + " " + i);
    }

    public static void main(String[] args) {
        System.out.println(Thread.currentThread().getName());
        RunnableThreadTest rtt = new RunnableThreadTest(999);
        new Thread(rtt, "新线程1").start();
    }
}

3.Callable

/**
 *
 */
package testJava2.thread;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * @author xxx.sjtu
 * @function
 * @date 2017年5月17日
 * @version
 */
public class CallableThreadTest implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        int i = 2017;
        System.out.println(Thread.currentThread().getName() + " " + i);
        return i;
    }

    public static void main(String[] args) {
        CallableThreadTest ctt = new CallableThreadTest();
        FutureTask<Integer> ft = new FutureTask<>(ctt);
        new Thread(ft, "有返回值的线程").start();
        try {
            System.out.println("子线程的返回值:" + ft.get());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }

}
时间: 2024-10-12 12:26:01

java多线程的3种写法的相关文章

Java多线程的几种写法

Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口:1.继承Thread方法 class TestThread extends Thread{ String name; public TestThread(String name){ this.name=name; } @Override public void run() { for (int i = 0; i < 6; i++) { System.out.p

Java单例模式的七种写法

Java单例模式的七种写法 第一种(懒汉,线程不安全) public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } 优缺点:这种写法lazy loading很明显,

单例模式:Java单例模式的几种写法及它们的优缺点

总结下Java单例模式的几种写法: 1. 饿汉式 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } 优点:实现简单,不存在多线程问题,直接声明一个私有对象,然后对外提供一个获取对象的方法. 缺点:class 类在被加载的时候创

【Java多线程】两种基本实现框架

Java多线程学习1——两种基本实现框架 一.前言 当一个Java程序启动的时候,一个线程就立刻启动,改程序通常也被我们称作程序的主线程.其他所有的子线程都是由主线程产生的.主线程是程序开始就执行的,并且程序最终是以主线程的结束而结束的. Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的.每用Java命令启动一个Java应用程序,就会启动一个JVM进程.在同一个JVM进程中,有且只有一个进程,就是它自己.在这个JVM环境中,所有程序代码的运行都

Java多线程的两种实现方式的区别以及深刻同步问题中的锁对象

首先我们知道创建线程有两种方式: 1.继承Thread类:2.实现Runnable接口. 但是这两这并非完全一样的.下面谈谈区别: 因为Java并不支持多继承的(接口是可以多继承接口的.不过一般我们不提),但支持多实现.当一个类继承了父类,就不能再继承Thread类,只能通过实现接口的形式创建线程. 继承Runnable接口更加符合面向对象的思想.线程分为两部分,一是线程对象,二是线程任务.继承Thread类,线程对象和线程任务(run方法内的代码)耦合在一起.一旦创建了Thread类的子类对象

Java 单例模式的七种写法

第一种(懒汉,线程不安全): public class Singleton {      private static Singleton instance;      private Singleton (){}      public static Singleton getInstance() {      if (instance == null) {          instance = new Singleton();      }      return instance;  

java多线程有几种实现方法,都是什么?

转自:http://www.cnblogs.com/liujichang/p/3150387.html 多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方法有两种,分别是synchronized,wait与notify 先看一下java线程运行时各个阶段的运行状态 java实现多线程有两种方法 1.继承Thread类 2.实现Runnable接口 这两种方法的共同点: 不论用哪种方法,都必须用Thread(如果是Thead子类就用它本身)产生线程,然后再调用s

实现Java多线程的三种方式

1. JAVA多线程实现方式    JAVA多线程实现方式主要有三种: 继承Thread类 实现Runnable接口 使用ExecutorService.Callable.Future实现有返回结果的多线程. 其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的. 2. 继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但 Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread

java多线程的3种实现方式

多线程相关的问题 1.什么是进程? ? 正在执行的程序 2.什么是线程? ? 进程的子单位,一个能够完成独立功能的执行路径 3.为什么需要开启多线程? 当执行某些耗时操作的任务的时候需要开启多线程,防止线程阻塞 能够让两个任务看起来像是在同时执行 提高CPU的使用率,进而提高进程和内存的使用率 4.为什么开启多线程会同时执行? ? 因为CPU切换执行的速度太快了,肉眼无法差距 5.开启多线程是不是越多越好,提高了效率还是降低了效率? ? 不是,线程越多,效率越慢,但是太少,浪费CPU资源,所以,