线程模型
什么是程序
安装在磁盘上的一段指令集合,它是静态的概念
什么是进程
它是运行中的程序,是动态的概念,每个进程有独立的 资源空间
什么是线程
轻量级进程,是程序执行流的最小单元,是程序中一个单一的顺序.线程是进程中 的一个实体,是被系统独立调度和分派的基本单位
什么是多线程
则指的是在单个程序中可以同时运行多个不同的 线程执行不同的任务
多线程的特点
一个进程可以包含一个或多个线程
一个程序实现多个代码同时交替运行就需要产生多个线程
线程本身不拥有系统资源,与同属一个进程的其他线程共享所在进程所拥有的资源
同一进程中的多个线程之间可以并发执行.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; } } } }