——进程、线程简单介绍

时间:2022-01-17 15:58:40
  1. 1、线程、进程:

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

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

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

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

当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);
}
}

}

}