zoukankan      html  css  js  c++  java
  • 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    
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    数列分块入门 1-8
    最远点对 [线段树+树的直径]
    实验室外的攻防战 UOJ#180 [树状数组]
    二叉搜索树 [四边形不等式优化区间dp]
    树上的等差数列 [树形dp]
    序列 [树状数组+离散化]
    ATcoder1983 BBQ Hard
    8.18日报
    8.17日报
    8.16日报
  • 原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4617052.html
Copyright © 2011-2022 走看看