Java-多线程(一)多线程概述和创建线程

2018-07-17  本文已影响6人  码农随想录

概述

多线程的使用可以合理使用cpu的资源,如果线程过多会导致降低性能。

该如何创建线程呢?

class Demo extends Thread
{
    private String name;
    Demo(String name)
    {
        this.name = name;   
    }
    public void run()
    {
        for(int x=1; x<=20; x++)
        {
            System.out.println("name="+name+"..."+Thread.currentThread().getName()+"..."+x);
        }
    }
}


class  ThreadDemo
{
    public static void main(String[] args) 
    {
        //创建了两个线程对象。
        Demo d1 = new Demo("小强");
        Demo d2 = new Demo("旺财");
        d2.start();//将d2这个线程开启。
        d1.run();//由主线程负责。
        
        /*
        面试题:线程对象调用 run方法和调用start方法区别?
        调用run方法不开启线程。仅是对象调用方法。
        调用start开启线程,并让jvm调用run方法在开启的线程中执行。
        */
    }
}

2.1,定义类实现Runnable接口:避免了继承Thread类的单继承局限性。
2.2,覆盖接口中的run方法。将线程任务代码定义到run方法中。
2.3,创建Thread类的对象:只有创建Thread类的对象才可以创建线程。
2.4,将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
因为线程已被封装到Runnable接口的run方法中,而这个run方法所属于Runnable接口的子类对象,
所以将这个子类对象作为参数传递给Thread的构造函数,这样,线程对象创建时就可以明确要运行的线程的任务。
2.5,调用Thread类的start方法开启线程。

class Demo implements Runnable
{
    private String name;
    Demo(String name)
    {
        this.name = name;
    }
    //覆盖了接口Runnable中的run方法。
    public void run()
    {
        for(int x=1; x<=20; x++)
        {
            System.out.println("name="+name+"..."+Thread.currentThread().getName()+"..."+x);
        }
    }
}

class ThreadDemo2 
{
    public static void main(String[] args) 
    {
        //创建Runnable子类的对象。注意它并不是线程对象。
        Demo d = new Demo("Demo");
        //创建Thread类的对象,将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
        Thread t1 = new Thread(d);
        Thread t2 = new Thread(d);
        //将线程启动。
        t1.start();
        t2.start();
        
        System.out.println(Thread.currentThread().getName()+"----->");
    }
}
class Thread{

    private Runnable target;

    Thread(Runnable target)
    {
        this.target = target;
    }
    public void run() {
        if (target != null) {
            target.run();
        }
    }
    public void start()
    {
        run();
    }
}

Runnable d = new Demo();
Thread t = new Thread(d);
t.start();
上一篇 下一篇

猜你喜欢

热点阅读