多线程- 让程序更高效的运行

多线程- 让程序更高效的运行 标签:otherwise list throw 也会 require

多线程- 让程序更高效的运行

标签:otherwiselistthrow也会requiredirectlychangewaitingcareful

Java Thread 的一些认识:

  • Java是抢占式线程,一个线程就是进程中单一的顺序控制流,单个进程可以拥有多个并发任务,其底层是切分CPU时间,多线程和多任务往往是使用多处理器系统的最合理方式
  • 进程可以看作一个程序或者一个应用;线程是进程中执行的一个任务,多个线程可以共享资源
  • 一个Java 应用从main 方法开始运行,main 运行在一个线程内,也被称为 “主线程”,Runnable也可以理解为Task (任务)
  • JVM启动后,会创建一些守护线程来进行自身的常规管理(垃圾回收,终结处理),以及一个运行main函数的主线程
  • 随着硬件水平的提高,多线程能使系统的运行效率得到大幅度的提高,同时异步操作也增加复杂度和各种并发问题

■ 线程 VS 进程

  • 在一个已有进程中创建一个新线程比创建一个新进程快的多
  • 终止一个线程比终止一个进程快的多
  • 同一个进程内线程间切换比进程间切换更快
  • 线程提供了不同的执行程序间通信的效率,同一个进程中的线程共享同一进程内存和文件,无序调用内核就可以互相通信,而进程间通信必须通过内核

■ 同步和异步

  • 同步方法一旦开始,调用者必须等到方法调用返回之后,才能继续后续行为
  • 无先后顺序,一旦开始,方法调用便立即返回,调用者就可以继续后续行为,一般为另一个线程执行

■ 阻塞和非阻塞

  • 当一个线程占用临界区资源,其他线程也想要使用该资源就必须等待,等待会导致线程的挂起,也就是阻塞(线程变成阻塞状态)。此时若占用资源的线程一直不愿意释放资源,那么其他所有阻塞在该临界区的线程都会被挂起,变成阻塞状态,不能正常工作,直到占用线程释放资源
  • 非阻塞强调没有一个线程可以妨碍其他线程执行,所有线程都会尝试去做下一步工作

■ 临界资源与临界区

  • 一般指的是公共共享资源,即可以被多个线程共享使用。但同一时间只能由一个线程去访问和操作临界区的资源,一旦临界区资源被一个线程占用,其他线程也想要使用该资源就必须等待,就好比好多人想上大号,但只有一个坑,一个人占了坑,其他人就得排队等待喽
  • 临界区可以认为是一段代码,线程会在该端代码中访问共享资源,因此临界区的界定标准就是是否访问共享(临界)资源(有点类似形成闭包的概念);一次只允许有一个程序(进程/线程)在该临界区中

■ 类定义

public class Thread implements Runnable {
  /* Make sure registerNatives is the first thing <clinit> does.     初始化时调用 Java 本地方法,实现了Runnable接口  */
private static native void registerNatives();
static {
registerNatives();
}

■ 构造器

/**
* 默认构造器
* 其中name规则为 \”Thread-\” + nextThreadNum()
*/
public Thread() {
init(null, null, \”Thread-\” + nextThreadNum(), 0);
}
/**
* 创建一个指定Runnable的线程
* 其中name规则为 \”Thread-\” + nextThreadNum()
*/
public

作者: 老毛桃

为您推荐

返回顶部