55.【Java 线程】(一)

简介: 55.【Java 线程】

1. 什么是进程?

正在运行中的应用程序,通常称为进程。每个进程都有自己独立的地址空间(内存空间),每当用户启动一个进程时,操作系统就会为该进程分配一个独立的内存空间,让应用程序在这个独立的内存空间中运行。

2.什么是线程?

main函数是线程、Thread t=new Thread()。出来的是线程,正常的情况下的方法不是线程。).

线程是一个轻量级的子进程,是最小的处理单元;是一个单独的执行路径。可以说:线程是进程的子集(部分)。

3.线程特点:

线程是独立的。如果在一个线程中发生异常,则不会影响其他线程。它使用共享内存区域。

4.进程和线程的区别:

1、容易创建新线程。但是,创建新进程需要重复父进程

2线程可以控制同一进程的其他线程**。进程无法控制兄弟进程,只能控制其子进程。

3、进程拥有自己的内存空间。线程使用进程的内存空间,且要和该进程的其他线程共享这个空间;而不是在进程中给每个线程单独划分一点空间。

4、(同一进程中的)线程在共享内存空间中运行,而进程在不同的内存空间中运行。

5、线程可以使用wait(),notify(),notifyAll()等方法直接与其他线程(同一进程)通信;而,进程需要使用“进程间通信”(IPC)来与操作系统中的其他进程通信。

5.多任务和线程:

多任务是指在系统中同时运行多个程序,如果只有一个处理器只有一个进程的一个指令被执行,可以使这些程序进行交替执行,由于间隔的时间短,这些程序看上去好像在同时运行.

如果将进程划分为线程,每个线程轮流占用处理器,可以减少并发时间.

(一)、线程(Thread)

1.线程的创建:

为什么要创建线程?

为了将进程划分为线程,要在程序中创建多个线程对象(java.lang.Thread)

2.线程的构造方法:

3.线程的成员方法:

4.静态成员函数:(调用的时候要用类名)

5.线程的创建:

在Java中,每个程序至少自动拥有一个主线程。如果需要使用其他线程,采用以下两种方式进行创建新的线程。

第一种:

继承(Thread)类,用它覆盖类方法中的run()方法.

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello extends Thread {
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println(currentThread().getName()+i);
        }
    }
    public static void main(String []avgs) {
        System.out.println(activeCount());   //当前线程活跃数目
        hello h1=new hello();  //创建新线程
        hello h2=new hello();  //创建新线程
        h1.start();  //导入线程
        h2.start();  //导入线程
        //Thread.currentThread().getThreadGroup().list();
        }
}

第二种:

编写一个类,使它实现java.lang.Runnable接口,然后在Thread构造函数中使用它.

import java.sql.SQLOutput;
import java.util.*;
import java.awt.*;
import java.lang.Math;
public class hello implements Runnable {
    public void run(){
        for(int i=0;i<10;i++){
            System.out.println(Thread.currentThread().getName()+" "+i);  //线程对象调用
        }
    }
    public static void main(String []avgs) {
        System.out.println(Thread.activeCount());   //当前线程活跃数目
        hello h1=new hello();  //接口对象
        Thread t1=new Thread(h1);  //把接口得对象传递给线程
        hello h2=new hello();  //接口对象
        Thread t2=new Thread(h2);//把接口得对象传递给线程
        t1.start();  //导入线程
        t2.start();  //导入线程
        //Thread.currentThread().getThreadGroup().list();   //得到调用线程的列表
        } 
}

(二)、线程的生命周期

创建(new)—>就绪(start)—>运行中(调度)------->死亡(run()结束)

阻塞:

1.等待阻塞: 运行中 调用(wait())函数的时候,如果调用notify()或则notifyAll() 就解除当前的阻塞进入到 就绪阶段.

2.互斥阻塞:运行中 调用synchronized()函数,试图获得某个对象的同步锁,如果该对象的同步锁已经被其他占用,则该线程被放入锁池中.

3.其他阻塞: 运行中 调用sleep()函数,join()方法

(三)、线程的优先级和调度:

线程的优先级范围i是1~10,最低是1,最高是10,默认是5.

获得优先级:

getPriority()  //用于获得线程的优先级

设置优先级

setPriority()  //用于设置优先级

1.线程的调度采用占先原则

2.相同优先级的线程,有分时和独占两种调度方式.

(四)、异常处理

1.error类:

包括了一些严重的。程序不能处理的系统错误,如同有内存不足,虚拟机错误、栈溢出等。这类错误主要由硬件问题引起的,与程序无关

2.Exception类

Exection类及其子类都是程序因考虑不周或不可控因素导致的错误,根据编译器是否对某类异常进行检查,Expection类分为非受检异常(运行异常)和受检异常(需要程序员处理)两种。

3.异常处理步骤:

try{}

可能出现的异常语句块,可能有错误,也可能没有错误。当try子句中的某个语句发生异常后,产生异常对象,终止当前正在执行的语句,后面的语句将不再执行,然后抛出异常对象

catch{}

根据try{}抛出的异常对象,那么catch进行从上倒下一直捕捉异常对象,进行一直捕捉,直到找到为止

finnaly{}

无论是否异常,finnaly子句依然正常执行

try{
}
catch(异常类型1, 异常对象){
    //处理类型1  (拆弹专家1)
}
catch(异常类型2, 异常对象){
    //处理类型2   (拆弹专家2)
}
finally{
  无论出现异常都要抛出
}

4.举列子:

错误信息:

捕捉错误:

手动修改错误:


相关文章
|
12天前
|
安全 Java 调度
Java编程时多线程操作单核服务器可以不加锁吗?
Java编程时多线程操作单核服务器可以不加锁吗?
32 2
|
4天前
|
Java 数据库 UED
Java的多线程有什么用
Java的多线程技术广泛应用于提升程序性能和用户体验,具体包括:提高性能,通过并行执行充分利用多核CPU;保持响应性,使用户界面在执行耗时操作时仍流畅交互;资源共享,多个线程共享同一内存空间以协同工作;并发处理,高效管理多个客户端请求;定时任务,利用`ScheduledExecutorService`实现周期性操作;任务分解,将大任务拆分以加速计算。多线程尤其适用于高并发和并行处理场景。
|
16天前
|
存储 缓存 Java
java线程内存模型底层实现原理
java线程内存模型底层实现原理
java线程内存模型底层实现原理
|
20天前
|
缓存 Java 应用服务中间件
Java虚拟线程探究与性能解析
本文主要介绍了阿里云在Java-虚拟-线程任务中的新进展和技术细节。
|
26天前
|
存储 缓存 安全
【Java面试题汇总】多线程、JUC、锁篇(2023版)
线程和进程的区别、CAS的ABA问题、AQS、哪些地方使用了CAS、怎么保证线程安全、线程同步方式、synchronized的用法及原理、Lock、volatile、线程的六个状态、ThreadLocal、线程通信方式、创建方式、两种创建线程池的方法、线程池设置合适的线程数、线程安全的集合?ConcurrentHashMap、JUC
【Java面试题汇总】多线程、JUC、锁篇(2023版)
|
18天前
|
Java 开发者
Java中的多线程基础与应用
【9月更文挑战第22天】在Java的世界中,多线程是一块基石,它支撑着现代并发编程的大厦。本文将深入浅出地介绍Java中多线程的基本概念、创建方法以及常见的应用场景,帮助读者理解并掌握这一核心技术。
|
14天前
|
Java 调度
Java-Thread多线程的使用
这篇文章介绍了Java中Thread类多线程的创建、使用、生命周期、状态以及线程同步和死锁的概念和处理方法。
Java-Thread多线程的使用
|
20天前
|
Java
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
领略Lock接口的风采,通过实战演练,让你迅速掌握这门高深武艺,成为Java多线程领域的武林盟主
25 7
|
19天前
|
Java 程序员
Java中的多线程基础与实践
【9月更文挑战第21天】本文旨在引导读者深入理解Java多线程的核心概念,通过生动的比喻和实例,揭示线程创建、同步机制以及常见并发工具类的使用。文章将带领读者从理论到实践,逐步掌握如何在Java中高效地运用多线程技术。
|
17天前
|
Java 调度 开发者
Java中的多线程编程:从基础到实践
本文旨在深入探讨Java多线程编程的核心概念和实际应用,通过浅显易懂的语言解释多线程的基本原理,并结合实例展示如何在Java中创建、控制和管理线程。我们将从简单的线程创建开始,逐步深入到线程同步、通信以及死锁问题的解决方案,最终通过具体的代码示例来加深理解。无论您是Java初学者还是希望提升多线程编程技能的开发者,本文都将为您提供有价值的见解和实用的技巧。
15 2