线程(基础)

本文详细介绍了程序、进程和线程的概念及其关系,指出进程是程序的运行实例,一个进程可包含多个线程。线程作为进程内的执行单元,共享进程资源。建议使用实现Runnable接口创建线程以避免单继承限制。讨论了线程的优先级和守护线程特性,守护线程会在所有非守护线程结束后才结束。此外,还阐述了多线程同步的重要性,同步机制包括synchronized关键字修饰代码块和方法,以防止数据竞争问题。
摘要由CSDN通过智能技术生成

1,线程概述

程序,进程,线程

程序(program)是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码。(静态的代码)

进程((process)就是正在执行的程序,从Windows角度讲,进程是含有内存和资源并安置线程的地方.(运行中的程序,加载到内存中执行).

线程(thread)进程可进一步细化为线程,是一个进程内部的最小执行单元.

2,三者关系

进程是程序的运行过程

一个进程中可以包含多个线程,一个线程只能属于一个进程,线程不能脱离进程存在.

一个进程中至少包含一个线程,即主线程,java中的main就是主线程

所有线程共享进程资源

在主线程中可以创建并启动其他线程

3进程的两种创建方式

//继承Thread
public class TicketThreadDemo extends Thread{
    static int ticket = 10; //多个线程访问共享资源
    static Object obj = new Object();

    @Override
    public void run() {
        while(true){
            if(ticket>0){
                printTicket();
            }else{
                break;
            }
        }
    }
    //实现Runnable
    public class TicketThread implements Runnable{
    int  ticket = 10;


    @Override
    public void run() {
        while(true){
            if(ticket>0){
                printTicket();
            }else{
                break;
            }
        }
    }
    //调用方式继承THread
    public static void main(String[] args) {
        TicketThreadDemo t1 = new TicketThreadDemo();
        t1.setName("窗口1");
        t1.start();    //该方法为启动进程    
     //调用方式该方法为实现Runnable
     public class Test {
    public static void main(String[] args) {
        //创建一个出票任务
        TicketThread ticketThread = new  TicketThread();

        //创建两个线程来执行出票任务
        Thread t1 = new Thread(ticketThread,"窗口1");
        Thread t2 = new Thread(ticketThread,"窗口2");

        t1.start();
        t2.start();

    }
       

3建议

建议继承Runnable接口 原因:

1.避免单继承, 实现接口还可以继承其他类

2.多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处理同一份资源。(线程同步)

4.线程中用到方法:

run() 编写线程中需要执行的任务代码

start() 启动线程

Thread类的构造方法

Thread(Runnable target)

Thread(Runnable target,String name) 为线程命名

Thread.currentThread() 获得当前正在执行的线程
getName() 获取到线程名称
setName(“名称”)为线程设置名称

45线程优先级

java中线程的优先级 用整数表示 1-10

默认情况下线程的有限级为5

setPriority(1)设置线程优先级
getPriority()获得线程优先级

牵扯到cpu的执行权

cpu执行的策略:

时间片: 就是排队,先来先执行

抢占式: 对优先级高的先执行

6.守护线程

是特殊的一种

当把一个线程设置为守护线程时,守护线程需要等所有的非守护线程全部结束后,才会销毁.

ThreadDemo t = new ThreadDemo();            
t.setDaemon(true);//将线程设置为守护线程,必须在线程启动之前设置            
t.start();

jvm中的垃圾回收 就是一个典型的守护线程         

7.多线程同步

同步的前提:

多线程情况下.

多个线程访问同一个共享数据(资源).

并发与并行
**并行:**多个CPU同时执行多个任务。比如:多个人同时做不同的事。
**并发:**一个CPU(采用时间片)同时执行多个任务。比如:秒杀、多个人做同一件事。

线程同步前提:多线程,多个线程访问同一个共享资源.

同步机制: 排队+锁

static 变量 随着类的加载而加载.生命周期比较长

非static 变量 生命周期与对象相同

同步方法如下:

synchronized修饰代码块
synchronized修饰方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值