• 创建线程的三种方式


      创建线程的方式三种:

     1 package cn.crxy.newThread;
     2 
     3 import java.util.concurrent.Callable;
     4 import java.util.concurrent.ExecutionException;
     5 import java.util.concurrent.FutureTask;
     6 
     7 public class NewThreadDemo {
     8 
     9     public static void main(String[] args) throws InterruptedException, ExecutionException {
    10         //第一种方式
    11         Thread t1 = new Thread(){
    12             
    13             @Override
    14             public void run() {
    15                 System.out.println("new Thread 1");//输出:new Thread 1
    16             }
    17         };//创建线程
    18         
    19         t1.start();//启动线程
    20         System.out.println(t1.getName());//输出:Thread-0
    21         
    22         //第二种方式
    23         Thread t2 = new Thread(new Runnable() {
    24             
    25             @Override
    26             public void run() {
    27                 System.out.println("new Thread 2");//输出:new Thread 2
    28             }
    29         });
    30         
    31         t2.start();
    32 
    33         System.out.println(Thread.currentThread().getName());//输出:main
    34         
    35         
    36         //第三种方式
    37         FutureTask<String> ft = new FutureTask<String>(new Callable<String>() {
    38             
    39             @Override
    40             public String call() throws Exception {
    41                 System.out.println("new Thread 3");//输出:new Thread 3
    42                 return "aaaa";
    43             }
    44         });
    45         
    46         Thread t3 = new Thread(ft);
    47         t3.start();
    48         String result = ft.get();
    49         System.out.println(result);//输出:aaaa
    50         
    51     }
    52 }

    首先要明白什么是线程?

    明白线程之前要明白什么是进程?

    进程是什么呢?  进程是计算机中运行的一个应用程序.

    线程:执行该进程的逻辑单元.  线程是用来执行进程的.

    Java中万物皆对象,线程也被描述成了一个对象就是Thread对象.

    Java对多线程的支持也是特别完善的,特别是JDK1.5之后.

    首先明白什么是线程? 什么是进程?

    进程就是计算机中运行的一个应用程序.    线程就是执行该进程的逻辑单元.

    线程管理:

             创建线程的方式:

                       1.继承Thread类,并复写run方法,创建该类对象,调用start方法开启线程。

                       2.实现Runnable接口,复写run方法,创建Thread类对象,将Runnable子类对象传递给Thread类对象。调用start方法开启线程。

                      

                       第二种方式好,将线程对象和线程任务对象分离开。降低了耦合性,利于维护

                      

                       3.创建FutureTask对象,创建Callable子类对象,复写call(相当于run)方法,将其传递给FutureTask对象(相当于一个Runnable)。

                         创建Thread类对象,将FutureTask对象传递给Thread对象。调用start方法开启线程。这种方式可以获得线程执行完之后的返回值。

    第三种使用Runnable功能更加强大的一个子类.这个子类是具有返回值类型的任务方法.

    第一种和第二种两种方式是run()方法运行完是没有返回值的.

    线程的信息: 

     1 public class ThreadInfo {
     2 
     3     public static void main(String[] args) {
     4         
     5         Thread t1 = new Thread(new Runnable() {
     6             
     7             @Override
     8             public void run() {
     9                 synchronized (ThreadInfo.class) {
    10                     System.out.println("Thread");
    11                 }
    12             }
    13         });
    14         
    15         t1.start();
    16         
    17         
    18         System.out.println(t1.getId());
    19         System.out.println(t1.getName());
    20         System.out.println(t1.getPriority());//优先级 1-10
    21         System.out.println(t1.getState());//线程状态: NEW TERMINATED RUNNABLE TIMED_WAITING WAITING BLOCKED
    22     }
    23 }
  • 相关阅读:
    高并发第八弹:J.U.C起航(java.util.concurrent)
    高并发第七弹:不可变对象及常用的工具类
    高并发第六弹:线程封闭(ThreadLocal)
    分布式爬取链家网二手房信息
    scrapy CrawlSpider爬取猎云网文章数据
    selenium实现12306网站自动抢票
    王者荣耀官方壁纸爬取
    使用 vsftpd 服务传输文件
    使用 Apache 服务部署静态网站
    iptables 与 firewalld 防火墙
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/6180918.html
Copyright © 2020-2023  润新知