线程模型

线程模型

什么是程序

  安装在磁盘上的一段指令集合,它是静态的概念

什么是进程

   它是运行中的程序,是动态的概念,每个进程有独立的 资源空间

什么是线程

  轻量级进程,是程序执行流的最小单元,是程序中一个单一的顺序.线程是进程中 的一个实体,是被系统独立调度和分派的基本单位

什么是多线程

  则指的是在单个程序中可以同时运行多个不同的 线程执行不同的任务

 

多线程的特点

  一个进程可以包含一个或多个线程

  一个程序实现多个代码同时交替运行就需要产生多个线程

  线程本身不拥有系统资源,与同属一个进程的其他线程共享所在进程所拥有的资源

  同一进程中的多个线程之间可以并发执行.cpu会随机抽出时间,让我们的程序一会做这件事情,一会做另一件事情

多线程的目的

  最大限度的利用cpu资源

//THread和Runnable接口的区别

Runnable接口的好处
//1.避免单继承的局限
//2.适合资源的共享

通过继承Thread类创建线程

 

package com.iotek.day2;

public class ThreadDemo {
  public static void main(String[] args) {
    HelloThread h1=new HelloThread("A");
    //设置线程名称
    h1.setName("线程1");
    h1.start();
    
    HelloThread h2=new HelloThread("B");
    //设置线程名称
    h2.setName("线程2");
    h2.start();
    
    
    
}
}

class  HelloThread  extends Thread{
    
     public HelloThread(String name) {
        super(name);
    }
    
    
    @Override
    public void run() {
        for(int i=0;i<5;i++) {
            System.out.println(this.getName()+"  "+i);
        }
    }
    
}

通过实现Runable接口创建线程

  创建实现Runable接口的类的实例

  创建一个Thread类对象,将第一步实例化得到的Runnable对象作为参数传人Thread类的构造方法

 

package com.iotek.day2;

public class HelloRunnableDemo {
  public static void main(String[] args) {
    HelloRunnable h1=new HelloRunnable();
    //设置线程名字
    Thread t1=new Thread(h1,"A");
    t1.start();
    //设置线程名字
    Thread t2=new Thread(h1,"B");
    t2.start();
}
}


class HelloRunnable implements Runnable{
    
    
    
    @Override
    public void run() {
        for(int i=0;i<5;i++) {
            //根据Thread.currentThread().getName()得到线程名
            System.out.println(Thread.currentThread().getName()+i);
        }
        
    }
    
}

 

 Runnable接口的好处
//1.避免单继承的局限
//2.适合资源的共享

package com.iotek.day2;

public class StudentThreadDemo {
    public static void main(String[] args) {
        /*TicketThread t1 = new TicketThread("A窗口");
        t1.start();
        TicketThread t2 = new TicketThread("B窗口");
        t2.start();*/
        TicketRunnable r1=new TicketRunnable();
        Thread t1=new Thread(r1,"A窗口");
        t1.start();
        Thread t2=new Thread(r1,"B窗口");
        t2.start();
    }
}

/*
 * class TicketThread extends Thread{ private int ticket=5; public
 * TicketThread(String name) { super(name); }
 * 
 * @Override public void run() { while (true) {
 * 
 * System.out.println(this.getName()+" "+(ticket--)); if (ticket<1) { break; } }
 * } }
 */

class TicketRunnable  implements Runnable {
    private int ticket=5;
    @Override
    public void run() {
        while (true) {

            System.out.println(Thread.currentThread().getName() + " " + (ticket--));
            if (ticket < 1) {
                break;
            }
        }

    }

}

posted @ 2018-11-22 22:29  言西早石头侠  阅读(148)  评论(0编辑  收藏  举报