多线程

多线程:

进程:

我们所能运行起来的每一个程序,都称之为进程。

线程:

比如word文档中的拼写检查,就是一个线程。线程就是一个进程中的某一个功能点。

进程可以包含多个线程。每一个线程都是独立运行的。

进程对于线程一样,都是需要CPU分配时间才能够执行,CPU不会同时分配给每一个程序执行的时间,这个执行的时间是分别分配的,哪一个进程或者是线程获取到时间,哪一个进程或者是线程就执行,所以所进程或者线程都分来执行的,不是同时执行。

在java中如何实现多线程程序:
java中一共有2种实现方式:
  • 1.继承Thread类。需要重写run方法,run方法是线程的执行方法,一个线程启动以后就去执行run方法中的代码。

注意:线程编写完毕,想要启动线程,不能直接调用线程run方法,应该是调用线程的start()方法;

  • 2.实现Runnable接口,重写run方法

注意:自定的线程类实现了Runnable接口。本身是没有start方法的。如果此时我们想要创建线程类对象,可以通过Thread提供的构造方法,将Runnable接口的子类对象作为参数传递给Thread的构造方法。然后创建Thread类的对象。

两种实现线程的方式的却别:
  • 1继承Thread类的方式,受到单继承的局限,然后不能共享资源

  • 2实现Runnable接口的方式,不受单继承的局限,并且可以共享资源。

以后使用线程的时候,优先考虑实现Runnable接口的方式。

线程的状态:

线程一共有5种状态
新建
就绪
运行
阻塞
终止

常用的方法:

  • 1.Thread.currentThread():获取当前正在执行的线程对象

  • 2.getName():获取线程的名称

  • 3.setName():设置线程的名称

  • 4.getId():获取线程的ID

  • 5.isAlive():判断当前的线程是否启动并且正在运行.

  • 6.join():强制执行线程,对于被强制执行的线程来说,其他线程必须等待强制执行的线程执行完毕,才能够执行。

  • 7.sleep(long mills):让线程休眠指定的毫秒数。

  • 8.interrupt():将线程打断。

  • 9.setDaemon(boolean b):设置线程是否是后台线程。

  • 10.setPriority(int i):设置线程的优先级,优先级高的线程被优先执行的概率较大。

  • 11.yield():将一个线程的操作暂时让给其他线程执行。

【java中,为了提高线程操作的安全性,可以使用同步进行解决。】

java中同步的方式2种

1.同步代码块

语法

synchronized (同步的对象) {
    需要同步的代码。		
}

同步对象是指:当前正在操作的对象。

2.同步方法:

是指使用synchronized修饰的方法,被称为同步方法

生产者与消费者问题

假设:生产者负责生产,生产的产品包括信息的标题以及信息的内容。
消费者负责消费,消费者负责打印信息的标题以及内容。

wait与sleep的区别:

wait与sleep都是线程的阻塞方法,都会让线程进入到阻塞状态。但是sleep方法可以设置阻塞的时间,阻塞的时间一到自动进入就绪状态,wait方法让线程进入到则色状态,必须notify唤醒才能进入就绪状态。

原文地址:https://www.cnblogs.com/SunMoonSky/p/12372352.html