zoukankan      html  css  js  c++  java
  • Java的多线程创建方法

    1. 直接使用Thread来创建

    package com.test.tt;
    
    public class ThreadEx extends Thread{
        private int j;
        
        public void run(){
            for(j=0; j<100;j++){
                System.out.println("当前的线程名称是:"+ getName() + " " +  "当前j的值是:" + j);
            }
        }
        
    
        public static void main(String[] args) {
            for(int h=0; h<100;h++){
                
                if(h==20){
    //这里新建了两个Thread对象 ThreadEx threadTest1
    = new ThreadEx(); ThreadEx threadTest2= new ThreadEx(); threadTest1.start(); threadTest2.start(); } System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " + "当前h的值是:" + h); } } }

    2. 通过实现Runnable接口,并将Runnable实现对象作为Thread的Target的方式创建

    注:区别于第一种方法,这里可以达到两个线程共享变量i的目的。

    package com.test.tt;
    
    public class RunnableEx implements Runnable{
        
        private int i;
        @Override
        public void run() {
            for(i=0; i<100;i++){
                System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " +  "当前i的值是:" + i);
            }
            
        }
    
        public static void main(String[] args) {
            for(int j=0;j<100;j++){
                System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " +  "当前j的值是:" + j);
                if(j==20){
                    RunnableEx REx=new RunnableEx();
    //这里也新建了两个Thread对象,但是里面的Target是同一个Runnable实现类对象 Thread thread1
    = new Thread(REx, "实例1"); Thread thread2 = new Thread(REx, "实例2"); thread1.start(); thread2.start(); } } } }

    3. 通过实现Callable接口的方式创建(这是一个具有返回值的创建方式)

    注:FutureTask只能启动一个线程

    package com.test.tt;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.FutureTask;
    
    public class CallableEx implements Callable{
        @Override
        public Object call() throws Exception {
            int i =0;
            for(;i<1000;i++){
                System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " +  "当前i的值是:" + i);            
            }
            return i;
        }
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            CallableEx CEx = new CallableEx();
            FutureTask<Integer> task = new FutureTask<Integer>(CEx);
            
            for(int j=0;j<1000;j++){
                System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " +  "当前i的值是:" + j);
                if(j==200){
                    Thread thread1 = new Thread(task, "实例1");
                    thread1.start();
                }            
            }
            
            try{
    //这里的get()方法可以获取到子线程的返回值,而且在执行时会中断main线程 System.out.println(
    "线程的返回值:" + task.get()); }catch(Exception ex){ ex.printStackTrace(); } } }
  • 相关阅读:
    (转)使用 PyInstaller 把python程序 .py转为 .exe 可执行程序
    (转)使用 python Matplotlib 库绘图
    使用Matplotlib画图系列(一)
    Numpy常用金融计算(一)
    Windows中安装Linux子系统的详细步骤
    Centos7+Postfix+Dovecot实现内网邮件收发 风行天下
    centos7系统防火墙端口转发 风行天下
    Centos7+Postfix+Dovecot实现内网邮件收发
    centos7的路径含有空格Linux命令使用时路径存在空格、特殊符号(如、@等等) 风行天下
    zabbix无法使用Detect operating system [zabbix] 风行天下
  • 原文地址:https://www.cnblogs.com/moonpool/p/5472549.html
Copyright © 2011-2022 走看看