线程

线程的介绍:

线程是进程中一个顺序的执行流,是进程中的一个最小执行单位,进程内部的所有线程共享进程内存。进程间内存相互独立。

进程是操作系统中正在运行的一个程序(应该),一个多任务操作系统可以并发的执行多个进程

,而进程的并发严格来讲是进程中线程的并发。

多线程应用场景

1)多个并发下载任务
2)音乐播放的同时还对其进行缓存(下载)

3)边网络加载数据时,边听歌

线程创建:

a)构建Thread类的子类对象然后重写run方法
b)构建Thread类对象的同时传入Runnable类型对象(这个对象可以看成是一个要执行的任务)

线程启动:借助start方法让线程处于就绪状态

线程运行:线程启动以后一旦获得cpu就会执行run方法.

public class MyClass {

    public static void main(String[] args){
        System.out.println("main_helloword");
        new Thread(){//构建线程类型的子类类型的对象,并启动
            @Override
            public void run() {
                System.out.println("work_01_hello");
            }
        }.start();
        new Thread(new Runnable() {//构建Thread类对象的同时传入Runnable类型对象
            @Override
            public void run() {
                System.out.println("work_02_hello");
            }
        }).start();
    }
}


相关状态:

1)新建状态 (新创建的线程,还没有启动)
2)就绪状态 (启动了线程或者休眠的线程醒了)
3)运行状态 (线程正在执行run方法)
4)阻塞状态 (线程休眠或IO)
5)死亡状态 (线程run方法结束)

相关方法:

1)start(启动线程时执行,负责启动线程,只能启动1次)
2)run(线程运行时执行,一般用于执行业务)
3)sleep(阻塞当前线程,并让出CPU);
4)interrupt(唤醒线程对象)
5)currentThread(获得当前线程对象)
6)setName(设置线程的名字)
7)getName(获得线程的名字)
8)setDaemon(true)设置线程为守护线程(精灵线程)
9)isAlive()判定线程是否还活着

10)................

线程同步:

线程同步是多线程在共享数据集上的互斥与协作。
互斥:多线程在共享数据集上排队执行。
协作:多线程在共享数据集上协作执行.

多线程互斥的实现
应用场景:
1)多个线程
2)有共享数据集
3)共享数据集上的操作可以拆为多步执行,为非原子操作(原子操作指的是不可分割,是一个整体,操作一个整体)

怎么进行互斥的实现?对共享数据集加锁 (锁是唯一的,如果锁为对象,那么对象只创建了一个)
1)同步代码块synchronized (LOCK) {}
2)同步方法: 分实例方法和静态方法
a)public synchronized void put(this){}//锁为this
b)public static synchronized void take(){}//锁为对象或者类名.class
注:
a)实例方法默认使用this作为对象锁
b)静态方法默认使用类对象(类名.class)作为对象锁

回顾:
1)StringBuffer是一个线程安全的StringBuilder
2)ArrayList是一个线程不安全的集合
3)HashMap是一个线程不安全的集合

在线程不全的环境使用集合时要考虑线程安全集合的应用,例如:
1)Collections.synchronizedList(list)
2)ConcurrentHashMap 线程安全并且高效的hashmap
3).............


3.Android 线程同步中的线程协作。

Android 或java中线程之间的协作构建于互斥的基础之上,是在同步代码块或同步方法中,借
助Object类的wait,notify,notifyall方法实现。

1)wait:表示等待,调用此方法的线程会阻塞,同时让出CPU.
2)notify/notifyall,表示通知,调用此方法的线程用于通知具备相同锁对象的其它线程开始执行。

方法应用说明:
1)wait,notify/notifyall必须用在 同步代码块或同步方法中。

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值