多线程
1 多线程的介绍
进程:进程指正在运行的程序。
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
总结一句话就是:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
什么是多线程呢?即就是一个程序中有多个线程在同时执行。
关于主线程:
public class Demo01 { //主线程 //程序从上往下执行的过程 //javac编译Demo01 //jvm运行main方法,找操作系统os,开启线程 //对于CPU来说就有了一条执行路径,运行方法main的这条路径有个名字 //叫“main”即 主线程 public static void main(String[] args) { method01(); System.out.println(Math.abs(-9)); } public static void method01(){ for(int i=0;i<10000;i++){ System.out.println(i); } } }
创建线程的方式一 Thread类
构造方法有:
常用方法:
public class Demo02 { //开线程的第一种方法 //1.定义Thread子类,继承Thread,重写run()方法 //2.在测试类中,创建Thread子类对象 //3.用子类对象调用start()方法,只能调用一次 public static void main(String[] args) { //创建线程对象 ThreadDemo td=new ThreadDemo(); //开启线程 //start:1.让线程执行2.让jvm调用线程中的run方法 td.start(); for(int i=0;i<100;i++){ System.out.println("main..."+i); } } }
自定义线程类:
public class ThreadDemo extends Thread { public ThreadDemo(){ } public ThreadDemo(String name){ super(name); } public void run(){ System.out.println(getName()); for(int i=0;i<100;i++){ try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("thread..."+i); } } }
3.获取线程名称
Thread.currentThread()获取当前线程对象
Thread.currentThread().getName();获取当前线程对象的名称
创建线程的方式二 实现Runnable接口
l Thread类构造方法
public class MyRunnable implements Runnable { public void run() { for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"..."+i); } } }
public class Demo01 { //第二种创建线程的方式 //1.创建实现类,实现Runnable接口,重写run方法 //2.在测试类中创建实现类对象,创建线程对象 //将实现类对象传入线程对象的构造方法 //3.用线程对象开启线程 //好处:高内聚(自己的事情自己干),低耦合 public static void main(String[] args) { //创建线程任务对象 MyRunnable mr=new MyRunnable(); //创建线程对象 Thread t1=new Thread(mr); //开启线程 t1.start(); Thread t2=new Thread(mr); t2.start(); } }
用一句话来创建线程并开启线程
public class Demo02 { public static void main(String[] args) { /* //多态定义一个runnable实现类对象 //来描述线程对象 Runnable r=new Runnable() { public void run() { System.out.println("这是重写后的run方法"); } }; //创建线程 Thread t=new Thread(r); t.start();*/ //一句话创建线程并开启线程 new Thread(new Runnable(){ public void run() { System.out.println("run方法"); } }).start(); } }