<JAVA学习笔记4>——进程、线程简单介绍

来源:互联网 发布:excel数据平均值怎么用 编辑:程序博客网 时间:2024/05/19 13:18
  1. 1、线程、进程:

进程:是一个具有一定独立功能的程序,每一个进程都有自己的地址空间。
线程:是进程的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程至少有一个线程(单线程程序)
进程有三种基本状态:就绪、执行、阻塞

这里写图片描述

2、线程中常见的方法:

  • Thread(Runnable target)
  • Thread(Runnable target,String name);
  • String getName();// 返回该线程的名称。
  • void join();//等待线程终止
  • boolean isDaemon();//将该线程标记为守护线程或用户线程。
  • void yield();//暂停当前正在执行的线程对象,并执行其他线程。该方法必须在启动线程前调用。
  • isAlive() 测试线程是否处于活动状态。
  • setPriority();优先级

  • start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。
    结果是两个线程并发地运行;当前线程(从调用返回给 start 方法)和另一个线程(执行其 run 方法)。 多次启动一个线程是非法的。特别是当线程已经结束执行后,不能再重新启动。

  • void sleep();//
    在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),还会受到系统时间的影响。该线程不丢失任何监视器的所属权。

这里写图片描述

当CPU分配给该进程1s时间时,进程中的两个线程0、1开始抢夺资源,若线程0抢占到时间执行,在线程0中有 sleep(1000);在这个过程中,线程0是不会释放这个CPU的资源的。即:就算当前线程在休眠,也不会丢失任何监视器的所属权。

实例代码:

package com.xiaofeng.example;/** * 线程的两种用法:Thread(继承类) 、 Runnable(实现接口) */public class ThreadDemo {    public static void main(String[] args) {        MyThread t1 = new MyThread();        // 设置抢占CPU执行时间的优先级(知识几率,但不一定)//      t1.setPriority(Thread.MAX_PRIORITY);        // 把t1设置为守护线程        t1.setDaemon(true);        t1.start();        MyRunnable myRunnable = new MyRunnable();        Thread t2 = new Thread(myRunnable);        t2.start();        for (int i = 0; i < 10; i++) {            System.out.println(Thread.currentThread().getName() + "-- " +i);            try {                t1.sleep(1000);            } catch (InterruptedException e1) {                e1.printStackTrace();            }            if (i == 6) {                /*try {                    // 等待该线程被终止                    // 此处的含义是, 当i==6时等待t1执行完再执行自己的线程(main)                    t1.join();                } catch (InterruptedException e) {                    e.printStackTrace();                }*/            }        }    }    static class MyThread extends Thread {        @Override        public void run() {            super.run();            for (int i = 0; i < 10; i++) {                try {                    // 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。该线程不丢失任何监视器的所属权。                    Thread.sleep(1000);                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                System.out.println(Thread.currentThread().getName() + " --" + System.currentTimeMillis() + "-- " +i);            }        }    }    static class MyRunnable implements Runnable {        @Override        public void run() {            for (int i = 0; i < 10; i++) {                try {                    // 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)。该线程不丢失任何监视器的所属权。                    Thread.sleep(1000);                } catch (InterruptedException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }                System.out.println(Thread.currentThread().getName() + " --" + System.currentTimeMillis() +"-- " +i);            }        }    }}
1 0
原创粉丝点击