码迷,mamicode.com
首页 > 编程语言 > 详细

Java多线程(一)线程的理解和创建

时间:2021-06-02 20:40:57      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:图片   load   资源   遍历   run方法   断线   demo   yield   radius   

Java多线程

进程和线程

什么是进程?

程序是静止的,运行中的程序就是进程。

进程的三个特点:
    1.动态性:进程是运行中的程序,要动态的占用内存,CUP和网络等资源。
    2.独立性:进程与进程之间是相互独立的,彼此有自己的独立内存区域。
    3.并发性:是指同一个时间段内多个任务同时都在执行,并且都没有执行结束。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行 。

并行:同一时刻同时有多个在执行


什么是线程?

    --线程属于进程,一个进程可以包含多个线程,这就是多线程。
    --线程是一个独立执行的单元。
    --线程占用CUP相对于比进程小。
    --线程也支持并发性。
技术图片

进程和线程的区别

进程:有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,有一个或多个线程。
线程:堆空间是共享的,栈空间是独立的,线程消耗的资源比进程小。

线程的作用:

    --可以提高程序的效率,线程也支持并发性,可以有更多机会得到CPU。
    --多线程可以解决很多业务模型(比如12306买车票)。
    --大型高并发技术的核心技术。

注意:设计到多线程的开发可能都比较难理解。

线程的创建方式

线程的创建方式:

实现Runnable接口:
    --1.创建一个线程任务实现类实现Runnable接口

public class ThreadDemo01 implements Runnable{}

    --2.重写run()方法

@Override
    public void run() {
        //run方法线程体
        for (int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+"run方法执行"+i);
        }

    --3.创建一个线程任务对象

ThreadDemo01 threadDemo01 = new ThreadDemo01();

    --4.把线程任务对象包装成线程对象

//方式一:
Thread t1 = new Thread(threadDemo01);
t1.start();

//方式二:
new Thread(threadDemo01).start();

//方式三:
Thread thread = new Thread(threadDemo01,"线程2");
thread.start();

    --5.调用线程对象的start()方法启动线程

new Thread(threadDemo01).start();

实例:

//1.实现Runnable接口
public class ThreadDemo01 implements Runnable{
    //2.重写run()方法
    @Override
    public void run() {
        //run方法线程体
        for (int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+"run方法执行"+i);
        }
    }

    public static void main(String[] args) {
        //创建Runnable接口的实现类对象
        ThreadDemo01 threadDemo01 = new ThreadDemo01();
        //线程使用方式一:
        Thread t1 = new Thread(threadDemo01);
        t1.start();
        //线程使用方式二:
        new Thread(threadDemo01).start();

        //线程使用方式三:
        Thread thread = new Thread(threadDemo01,"线程2");
        thread.start();
    }
}

实现Runnable接口创建线程的优缺点:

缺点:代码复杂。
优点:
    --线程任务类只是实现了Runnable接口,可以继续继承其他类,而且可以继续实现其他接口(避免了单继承的局限性)
    --同一个任务对象可以被包装成多个线程对象

//例子
Thread t1 = new Thread(threadDemo01);
Thread t2 = new Thread(threadDemo01);

    --适合多个相同的程序代码的线程去共享同一个资源
    --实现了解耦操作,代码可以被多个线程共享,代码和线程独立
    --线程池可以放入实现Runnable或Callable线程任务对象

        注意:Thread类本身也实现了Runnable接口

线程简化写法:

new Thread(new Runnable() {
  @Override
    public void run() {
      for (int i=0;i<10;i++){
        System.out.println(Thread.currentThread().getName()+"run方法执行"+i);
      }
  }
}).start();

五大状态

线程五大状态:

技术图片

技术图片

线程常用的方法:

方法名 说明
setPriority(int newPriority) 更改线程的优先级
static void sleep(long millis) 在指定的毫秒数内让当前正在执行的线程休眠
void join() 等待该线程终止
static void yield() 暂停当前正在执行的线程对象,并执行其他线程
void interrupt() 中断线程,
public E get(int index) 返回指定索引处的元素
public int size() 返回集合中的元素个数
indexOf(Object o) 查询指定元素的位置 lastIndexOf也一样,只是从尾部开始遍历

Java多线程(一)线程的理解和创建

标签:图片   load   资源   遍历   run方法   断线   demo   yield   radius   

原文地址:https://www.cnblogs.com/luoxiao1104/p/14833430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!