线程的理解

一、线程概述

1、线程是什么?

线程是进程中一个顺序的执行流,在程序中表现为一个对象,多个这样的对象可以并发执行

2、进程是什么?

是一个正在运行的程序,一个进程中可以有一个线程或多个线程

3、线程的应用

当我们需要并发的处理多个任务时,可以使用多个线程,

例如:下载文件,加载图片,播放音乐...

4、多线程应用中的优劣势

1)优势:①提高系统的并发处理能力 ②改善用户体验

2)劣势:①数据的安全不好控制②代码的调试、维护难度加大

二、线程对象的创建、启动、运行

线程对象的类型为Thread类,启动线程对象需调用Thread对象的start方法;

线程在获得CPU执行时,会调用Thread对象的run方法,如果有任务需要交给线程执行,通常是在run方法中调度。run方法不能自己调用,但是可以重写;

启动线程,调用Thread类的start方法。

线程何时运行存在不确定性。

三、线程对象的状态

1、新建状态(new):new Thread(){}

2、就绪状态(start):调用线程对象的start()方法

3、启动状态(run):获得cpu,执行线程对象的run()方法

4、阻塞状态(sleep):sleep(),调用对象锁的wait()方法,注意,一般不应让主线程处于阻塞状态,而是让工作线程等待

5、死亡状态(dead):run()方法运行结束,该线程处于死亡状态

Thread tr=new Thread(){
      @Override
      public void run() {
        Log.i("TAG", "run()方法");
        super.run();
      }
    };
    tr.start();//启动一个进程;
  }


四、线程的相关方法

1) start():启动线程,此时线程处于就绪状态,等待获得cpu启动线程

2)run():线程运行时执行此方法

3)sleep():让当前线程休眠,同时让出CPU

4)setName():给线程起名字

5)getName():获得当前线程的名字

6)isAlive():判定线程是否还活着

7)setPrPriority():给线程设置优先级(MIN_PRIORITY=1,NORM_PRIORITY=5,MAX_PRIORITY=10)

 

8)setDeamon(true);设置线程为守护线程(启动之前设置),守护线程一般为服务性线程,当没有其他线程在执行时,守护线程会自动销毁。

9)join(时间);插入式线程,调用此方法的线程会优先执行,例如A线程正在执行,此时在A线程的run方法调用了B线程的join方法,那么A线程阻塞,B线程开始执行。

10)currentThread();静态方法获得当前线程

相关问题:

1)线程对象创建以后,可以调用run方法启动吗?不可以

2)线程对象启动以后,线程会立即执行run方法吗?不确定

3)多个线程可以并发执行吗?可以

4)工作线程中可以启动工作线程吗?可以

5)多个线程可以并发执行同一个任务吗?可以

五、Java中线程的同步

1、线程同步的概述

线程的同步多个线程有次序的执行各自的业务,多个线程并发执行时,在共享数据集上的互斥与协作;

互斥是为了保证数据的安全,协作是让多个线程在共享数据集上进行通讯,以确保业务的合理性。

2、java中线程的互斥

多线程的互斥指的是让多个线程在共享数据集上排队执行

实现方法:对共享数据集加锁

1)同步代码块synchronized(对象锁){}

2)同步方法

a)public synchronized void method01(){}实例方法对象锁默认为this

b)Public static synchronized voidmethod02(){}静态方法对象锁默认为“类名.class”(类对象)

 

回顾:

Vector是一个线程安全的ArrayList

HashTable是一个线程安全的HashMap

说明:现在已经不推荐使用Vetor和HashTable对象了,因为执行的效率比较低,可以考虑将线程不安全的集合转换为线程安全集合,例如执行list = Collections.synchronizedList(list);或者也可以考虑使用java.util.concurrent包下的一些集合,例如ConcurrentHashMap.

HashTable对整个底层哈希表上锁,ConcurrentHashMap是对底层哈希表分段进行加锁。

 

3、java中线程的协作

线程协作构建于线程互斥基础上,需要借助Object类的wait,notify,notifyall方法实现,以保证数据业务的合理性。

相关方法含义:

1)wait  调用此方法的线程阻塞,同时释放对象锁

2)notify/notifyall通知具备相同锁并且处于等待状态的线程开始执行

方法应用说明

1)wait,notify,notifyall必须用在同步代码块或同步方法中

2)wait,notify,notifyall必须由对象锁调用

 

案例:生产者消费者应用模型

1)生产者线程对象

2)消费者线程对象

3)容器对象(存储生产放的数据)

要求:生产者可以不断向容器(容器有大小限制)放数据,消费者可以不断的从容器中取数据。

基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值