1.什么是进程
程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。
进程是一个具有一定独立功能的程序,一个实体,每一个进程都有它自己的地址空间。
2.进程的状态
进程执行时的间断性,决定了进程可能具有多种状态。事实上,运行中的进程具有以下三种基本状态。
1)就绪状态
2)运行状态
3)阻塞状态
3.线程
线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干程序又可以划分成若干个线程。
线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个线程(单线程程序)
4.线程实现的两种方式
package com.vince; /** * 进程:一个具有独立内存空间的执行程序 * 线程:线程是进程中的其中一条执行路径(多条就是多线程),每个进程最少有一个线程 * 同一个进程中的多个线程共享一个内存空间 * 实现多线程的两种方式: * 1.继承Thread类 * 2.实现Runnable接口(推荐) * @author acer * */ public class ThreadDemo { public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); //创建一个线程对象 MyThread mt=new MyThread(); mt.setPriority(Thread.MAX_PRIORITY);//设置抢占CPU执行时间的优先级(只是几率大而已) mt.setDaemon(true);//将mt设置为守护线程 //mt.run();//直接调用不是启动线程,而是在本线程中执行方法 mt.start();//线程已准备就绪,等待cpu的调度 System.out.println(mt.isAlive()); MyRunnable mr=new MyRunnable(); Thread t=new Thread(mr); t.start(); System.out.println(t.isAlive()); for(int i=1;i<10;i++){ try { Thread.sleep(500); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"--"+i); if(i==5){ try { mt.join();//等待 } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } } //继承Thread类实现线程 static class MyThread extends Thread{ public void run() { // 在此方法中编写线程要执行的工作 for(int i=1;i<10;i++){ try { // 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行), //此操作受到系统计时器和调度程序精度和准确性的影响。 Thread.sleep(500); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"--"+System.currentTimeMillis()+"--"+i); } } } //实现Runnable接口实现线程 static class MyRunnable implements Runnable{ public void run() { // 在此方法中编写线程要执行的工作 for(int i=1;i<10;i++){ try { // 在指定的毫秒数加指定的纳秒数内让当前正在执行的线程休眠(暂停执行), //此操作受到系统计时器和调度程序精度和准确性的影响。 Thread.sleep(500); } catch (InterruptedException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"--"+System.currentTimeMillis()+"--"+i); } } } }