• Java 多线程初探(一) 创建线程


    线程是比进程更小的执行单元,一个进程执行的过程中可以产生多个线程。而每个线程都有自己相对对的资源、生命周期。线程之间可以共享代码和数据、实时通信、进行必要的同步操作。一个进程至少有一个线程,那就是系统创建的主线程。

    定义线程有两种方式:继承Thread类和实现Runnable接口。

    Thread类的构造方法有多个,如下:

    1. Thread()//分配新的 Thread 对象。
    2. Thread(Runnable target)//分配新的 Thread 对象。
    3. Thread(Runnable target, String name)//分配新的 Thread 对象。
    4. Thread(String name)//分配新的 Thread 对象。
    5. Thread(ThreadGroup group, Runnable target)//分配新的 Thread 对象。
    6. Thread(ThreadGroup group, Runnable target, String name)//分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
    7. Thread(ThreadGroup group, Runnable target, String name, long stackSize)//分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。
    8. Thread(ThreadGroup group, String name)//分配新的 Thread 对象。

    其实实现Runnable接口后还是要用到Thread类的构造方法的。


    利用Thread的子类创建线程

    要创建一个多线程程序,首先写一个子类继承Thread类,并覆盖其中run方法。run方法中的代码就是这个线程要实现的功能。然后再创建子类对象,最后调用该对象的start()方法启动线程。子类代码如下:

    public class myThread extends Thread {
        private static int count=0;
        
        @Override
        public void run() {
            for(int i=0;i<20;i++){
                count+=1;
                System.out.println("count= "+count);
                
                try {
                    sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public myThread(String arg0) {
            super(arg0);
        }    
    }

    启动线程如下:

    myThread th=new myThread();
    th.start();


    利用实现Runnable接口创建线程

    Runnable接口只有一个方法run(),所以实现只要实现了该方法,就可以利用Thread类的构造方法 Thread(Runnable target) 或 Thread(Runnable target, String name) 来创建线程。

    实现Runnable接口代码如下:

    public class myThreadRunable implements Runnable {
        
        private static int count=0;
        private Thread trval; //需要使用Thread类的构造方法,所以此处定义了一个Thread对象
        
        @Override
        public void run() {
            for(int i=0;i<20;i++){
                count+=1;
                System.out.println("My name is "+this.trval.getName()+" count= "+count);
                
                try {
                    this.trval.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        
        public myThreadRunable(){
            this.trval=new Thread(this);
        }
        
        public void start(){
            this.trval.start();
        }
    }

    启动线程如下:

    myThreadRunable th=new myThreadRunable();
    th.start();
    出处:http://www.zhaiqianfeng.com    
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    OCP 062【中文】考试题库(cuug内部资料)第29题
    413. 等差数列划分 力扣(中等) 找规律,细节
    264. 丑数 II 力扣(中等) 动态规划,不会
    313. 超级丑数 力扣(中等) 动态规划,不会做
    5840. 使字符串平衡的最小交换次数 力扣(中等) 第255场oppo周赛 猜出来的
    手写一个仿微信登录的Nodejs程序
    你不知道的CSS国际化
    React实现类似淘宝tab居中切换效果
    原来 CSS 这样写是会让 App 崩溃的
    css中class和id之间有什么区别?
  • 原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4617052.html
Copyright © 2020-2023  润新知