zoukankan      html  css  js  c++  java
  • Java 多线程实现

    如果要想在Java中实现多线程的三种途径:

    • 继承Thread类;
    • 实现Runnable接口;
    • 实现Callable接口;

    继承Thread类

    需要覆写Thread类中的run方法。

    package thread;
    //线程操作主类
    class MyThread extends Thread//这是一个多线程的操作类
    {
    	private String name ;
    	public MyThread(String name)
    	{
    		this.name = name;
    	}
    	@Override
    	public void run() {//覆写run()方法,作为线程的主体操作方法
    		for(int x = 1 ; x < 51 ; x++)
    		{
    			System.out.println(this.name + "-->"+x);
    		}
    	}
    }
    public class ThreadTest 
    {
    	public static void main(String[] args) 
    	{
    		MyThread mt1 = new MyThread("线程A");
    		MyThread mt2 = new MyThread("线程B");
    		MyThread mt3 = new MyThread("线程C");
    		
    		mt1.start();
    		mt2.start();
    		mt3.start();
    	}
    }
    
    

    实现Runnable接口

    需要实现run()方法。

    package thread;
    class MyThread implements Runnable//这是一个多线程的操作类
    {
    	private String name ;
    	public MyThread(String name)
    	{
    		this.name = name;
    	}
    	@Override
    	public void run() {//覆写run()方法,作为线程的主体操作方法
    		for(int x = 1 ; x < 51 ; x++)
    		{
    			System.out.println(this.name + "-->"+x);
    		}
    	}
    }
    public class ThreadTest 
    {
    	public static void main(String[] args) 
    	{
    		MyThread mt1 = new MyThread("线程A");
    		MyThread mt2 = new MyThread("线程B");
    		MyThread mt3 = new MyThread("线程C");
    		
    		new Thread(mt1).start();
    		new Thread(mt2).start();
    		new Thread(mt3).start();
    	}
    }
    
    

    实现Callable接口

    package com.zjw;
    
    import java.util.concurrent.*;
    
    public class Test03 {
        public static void main(String[] args) {
           MyCallable callable = new MyCallable();
            FutureTask<Integer> future = new FutureTask<>(callable);
            new Thread(future).start();
    
            try {
                Thread.sleep(1000);
                System.out.println("hello begin");
                System.out.println(future.isDone());
                //接收返回结果
                System.out.println(future.get());
                Integer result = future.get();
                System.out.println(result);
    
                System.out.println(future.isDone());
                System.out.println("hello end");
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        }
    }
    
    class MyCallable implements Callable<Integer>{
    
        @Override
        public Integer call() throws Exception {
            for (int i = 0;i<10;i++){
                System.out.println(Thread.currentThread().getName()+" "+i);
            }
            return 123;
        }
    }
    

    FutureTask继承关系图

    参考:
    Java-多线程:Callable接口和Runnable接口之间的区别
    Java Runnable与Callable区别
    Java并发编程:Callable、Future和FutureTask

    --------------- 我每一次回头,都感觉自己不够努力,所以我不再回头。 ---------------
  • 相关阅读:
    bzoj 5455
    hdu 6705
    hdu 6706
    斜率优化
    bzoj3672
    bzoj1367
    bzoj2118
    bzoj2337
    Codeforces 1077D Cutting Out(二分答案)
    Codeforces 1079C Playing Piano(记忆化搜索)
  • 原文地址:https://www.cnblogs.com/zjw-blog/p/13644480.html
Copyright © 2011-2022 走看看