初识线程基本知识

简介: 初识线程基本知识

1、线程


线程是操作系统能够进行运算的最小单位,被包含在进程中,是进程的实际运算单位。可以使用多线程提高运算速度。


2、进程


进程由操作系统分配的内存空间,包含一个或多个线程。


3、进程和线程的关系

一个线程不能独立的存在,它必须是进程的一部分。一个进程一直运行,直到所有的非守护线程都结束运行后才能结束。
线程是进程中的一部分,进程包含多个线程在运行。
一个程序至少有一个进程,一个进程至少有一个线程。
总结:
   1) 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
   2)资源分配给进程,同一进程的所有线程共享该进程的所有资源(内存、变量、常量等)
   3)真正在机器上运行的是线程。
   4)不同进程的线程间要利用消息通信的办法实现同步


4、线程安全


线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。
线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据
ArrayList、LinkedList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的。


示例


public static void main(String[] args){
        // 进行10次测试
        for(int i = 0; i < 10; i++){
            test();
        }
    }
    public static void test(){
        // 用来测试的List
        List<Object> list = new ArrayList<Object>();
        // 线程数量
        int threadCount = 100;
        // 用来让主线程等待threadCount个子线程执行完毕
        CountDownLatch countDownLatch = new CountDownLatch(threadCount);
        // 启动threadCount个子线程
        for(int i = 0; i < threadCount; i++){
            Thread thread = new Thread(new MyThread(list, countDownLatch));
            thread.start();
        }
        try {
            // 主线程等待所有子线程执行完成,再向下执行
            countDownLatch.await();
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        // List的size
        System.out.println(list.size());
    }
}
class MyThread implements Runnable{
    private List<Object> list;
    private CountDownLatch countDownLatch;//CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。
    public MyThread(List<Object> list, CountDownLatch countDownLatch){
        this.list = list;
        this.countDownLatch = countDownLatch;
    }
    public void run(){
        // 每个线程向List中添加100个元素
        for(int i = 0; i < 100; i++){
            list.add(new Object());
        }
        // 完成一个子线程
        countDownLatch.countDown();
    }


5、线程生命周期


1)新建状态 new()
2)就绪状态 star()
3)运行状态 run() 
4)阻塞状态 sleep()睡眠 suspend()挂起
5)死亡状态


6、线程优先级 1-10


初始默认都是5
**具有较高优先级的线程对程序更重要,并且应该在低优先级的线程之前分配处理器资源。但是,线程优先级不能保证线程执行的顺序
感谢阅读,线程的基本知识就记录到这里,欢迎点赞关注。
目录
相关文章
|
3天前
|
Java 程序员 调度
【并发编程】线程基础知识
【并发编程】线程基础知识
7 0
|
8月前
线程基础知识点
本章讲解了线程的相关知识
30 0
|
12月前
|
安全 Java 调度
【并发编程】线程的基础知识篇
【并发编程】线程的基础知识篇
|
缓存 安全 Java
线程基础知识总结
@[toc] 1. 认识线程(Thread) 1.1 概念 1.2 创建线程 1.2.1 方法1 继承Thread类 1.2.2 方法2 实现Runnable接口 1.2.3 实现 Callable 接口,使用 FutureTask 接收线程返回值 1.2.4 对比上面两种方法 2. Thread类及常见方法 2.1 Thread的常见构造方法 2.2 Thread的几个常见属性 2.3 启动一个线程-start() 2.4 中断一个线程 2.5 等待一个线程-join() 2.6 获取当前线程的引用 2.7 休眠当前线程 3. 线程的状态 3.1 线程的所有状态 3.2 线程各状态之间的转移
37 0
|
安全 Java 调度
Java多线程(1)--基本概念:程序、进程、线程
Java多线程(1)--基本概念:程序、进程、线程
99 0
Java多线程(1)--基本概念:程序、进程、线程
|
资源调度 Java 程序员
线程基础知识
计算机系统里每个进程(Process)都代表着一个运行着的程序,进程是对运行时程序的封装,系统进行资源调度和分配的基本单位。 一个进程下可以有很多个线程,线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发,线程同时也是操作系统可识别的最小执行和调度单位。 在 Java 里线程是程序执行的载体,我们写的代码就是由线程运行的。有的时候为了增加程序的执行效率,我们不得不使用多线程进行编程,虽然多线程能最大化程序利用 CPU 的效率,但也是程序事故多发、程序员脱发的最大诱因。主要是平时我们的思维默认是单线程的,写多线程的时候得可以切换一下才行。
|
缓存 监控 Java
【Java并发编程系列7】线程池基本知识
目前书籍《Java并发编程实战》看到“第7章:取消与关闭”,里面涉及到部分线程池的内容,然后第8章就是线程池,所以打算把之前看的线程池的资料再整理一下,便于后面能更好理解书中的内容。 之前看过一篇博客,关于线程池的内容讲解的非常好,我只截取基础知识部分,把Java基础内容全部掌握后,再对里面的原理部分进行深入理解,后面会附上该篇博客的链接。
106 0
【Java并发编程系列7】线程池基本知识
|
安全 Java 调度
|
Java
Java多线程学习(五)线程间通信知识点补充
欢迎关注我的微信公众号:**“Java面试通关手册”**(分享各种Java学习资源,面试题,以及企业级Java实战项目回复关键字免费领取)。另外我创建了一个Java学习交流群(群号:**174594747**),欢迎大家加入一起学习,这里更有面试,学习视频等资源的分享。
2243 0