三种线程的创建方式学习

线程名称设置,创建
  1. 方法1;通过继承Thread创建线程
        package com.Thread;

        public class ThreadDemo01 {
            public static void main(String[] args) {
                Thread.currentThread().setName("修主线程");
                //对子线程进行启动
                TreadDemo02 thread = new TreadDemo02("构造器传字符串参修改线程名字");//这里不能用子类进行调用方法,调用的话就当作普通方法执行了

                thread.start();
                //main的主线程
                for(int i =1;i<=10;i++)
                {
                    System.out.println(Thread.currentThread().getName()+i);
                }
            }
        }
        //开辟子线程工作区域
        class TreadDemo02 extends Thread {
            public TreadDemo02(String name){
                super(name);
            }
            public void run() {
                for(int i =1;i<=10;i++){
                    System.out.println(this.getName()+i);
                }
            }

        }
  1. 方法2,通过实现接口Runnable来创建线程

    (Runnable接口在Thread类中实现;由于一个类只能有一个父类;java的单继承;多实现特点;选择用接口Runnable;更加灵活;高效)

            package com.Thread;
            //线程体
            public class Demo003 implements Runnable{
                int ticketnum = 10;
                public void run() {
                    //有100人在抢票
                    for(int i = 1;i<=100;i++){
                        if(ticketnum>0){
                            System.out.println("我抢到了火车票;第"+ticketnum--+"张;从"+Thread.currentThread().getName()+"窗口");
                        }
                    }
    
                }
    
            }
    
    
            package com.Thread;
    
            public class Demo002 {
                public static void main(String[] args) {
                    Demo003 demo003 = new Demo003();
                    //Runnable方法调用线程;共享资源的能力也会强一些,不需要非得加个static来修饰
                    //这里的名字需要从获取主线程进行获取Thread.currentThread().getName();默认为main
                    //操控体
                    Thread t1 = new Thread(demo003,"1号");
                    t1.start();
                    Thread t2 = new Thread(demo003,"2号");
                    t2.start();
                    Thread t3 = new Thread(demo003,"3号");
                    t3.start();
                }
            }
    
    
    1. 方法3,Callable接口实现了线程体可以有返回值;可以有异常的述求;弥补了上述的不但是在实现线程启动时必须调用futureTask作为中间键进行嵌套本身类对象demo004和thread的连接启动
            package com.Thread;
            import java.util.Random;
            import java.util.concurrent.Callable;
            import java.util.concurrent.FutureTask;
            public class Demo004 implements Callable {
                @Override
                public Object call() throws Exception {
                    Random random = new Random();
                    int i = random.nextInt(5);
                    return i;
                }
            }
            class Demo005{
                public static void main(String[] args) throws Exception {
                    Demo004 demo004 = new Demo004();
                    FutureTask futureTask = new FutureTask(demo004);
                    Thread thread = new Thread(futureTask);
                    thread.start();
                    //这里通过futureTask调用返回值进行接收
                    Object o = futureTask.get();
                    System.out.println(o);
                }
            }

posted @ 2022-04-18 16:45  爱豆技术部  阅读(45)  评论(0)    收藏  举报