java学习笔记 多线程

进程是程序的一次动态执行过程,需要经历代码加载,代码执行,执行完毕的一个完整过程。

多进程操作系统能同时运行多个进程(程序),由于cpu具有备份时机制,所以每个进程都能循环获得自己的cpu时间片。由于cpu执行速度非常快,使得所有程序好像是在“同时运行”一样。

线程是比进程更小的单位,线程是在进程基础上进一步的划分。多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的程序单元称之为线程。(java在运行中至少会启动两个线程:1,main线程 2,垃圾回收线程)

线程的实现:

      一、继承Thread类

      二、实现Runnable接口

两种多线程实现方式区别:1.继承Thread类会受到单继承限制,实现Runnable接口可以避免。2,一个类如果继承Thread类实现多线程,那么start()方法只能调用一次,而Runnable可以调用多次,用这以实现资源共享。

public class Test {
    public static void main(String[] args) {
        MyThread1 mt1 = new MyThread1();
        mt1.start();
        MyThread2 mt2 = new MyThread2();
        Thread t2 = new Thread(mt2);//系统为线程自动命名,命名规则 Thread-XX
        Thread t3 = new Thread(mt2,"t333");//Thread类构造方法:为线程指定名称
        t2.start();
        t3.start();
        mt1.run();//注意这个语句放置位置!
    }
}

//多线程一 ,继承Thread类
class MyThread1 extends Thread {
    public void run(){
        for (int i = 0; i <= 3;i++) {
            System.out.println(Thread.currentThread().getName() + "运行" + i);//调用currentThread()静态方法及getName()
        }
    }
}

//多线程实现二,实现Runnable接口
class MyThread2 implements Runnable {
    public void run(){
        for (int i = 0; i <= 3;i++) {
            System.out.println(Thread.currentThread().getName() + "运行" + i);
        }
    }
}

/*
1.实现Runnable可以调用多次start()方法,用以实现资源共享
*/

时间: 2024-10-06 14:12:15

java学习笔记 多线程的相关文章

JAVA学习笔记 -- 多线程之共享资源

在多线程程序运行过程中,可能会涉及到两个或者多个线程试图同时访问同一个资源.为了防止这种情况的发生,必须在线程使用共享资源时给资源"上锁",以阻挡其它线程的访问.而这种机制也常常被称为互斥量,本文主要介绍它的两种方式synchronized和Lock . 1.synchronized 当任务要执行被synchronized关键字保护的代码片段的时候,它会检查锁是否可用,然后获取锁,执行代码,释放锁.synchronized也有两种用法: A.synchronized方法 import

Java学习笔记—多线程(java.util.concurrent并发包概括,转载)

一.描述线程的类:Runable和Thread都属于java.lang包 二.内置锁synchronized属于jvm关键字,内置条件队列操作接口Object.wait()/notify()/notifyAll()属于java.lang包 二.提供内存可见性和防止指令重排的volatile属于jvm关键字 四.而java.util.concurrent包(J.U.C)中包含的是java并发编程中有用的一些工具类,包括几个部分: 1.locks部分:包含在java.util.concurrent.

Java学习笔记---多线程同步的五种方法

一.引言 前几天面试,被大师虐残了,好多基础知识必须得重新拿起来啊.闲话不多说,进入正题. 二.为什么要线程同步 因为当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常.举个例子,如果一个银行账户同时被两个线程操作,一个取100块,一个存钱100块.假设账户原本有0块,如果取钱线程和存钱线程同时发生,会出现什么结果呢?取钱不成功,账户余额是100.取钱成功了,账户余额是0.那到底是哪个呢?很难说清楚.因此多线程同步就

Java学习笔记—多线程(并发工具类,java.util.concurrent.atomic包)

在JDK的并发包里提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段,Exchanger工具类则提供了在线程间交换数据的一种手段.本章会配合一些应用场景来介绍如何使用这些工具类. CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作.假如有这样一个需求:我们需要解析一个Excel里多个sheet的数据,此时可以考虑使用多线程,每个线程解析一个sheet里的数据,

Java学习笔记—多线程(同步容器和并发容器)

简述同步容器与并发容器 在Java并发编程中,经常听到同步容器.并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如Vector.Hashtable以及SynchronizedList等容器,如果有多个线程调用同步容器的方法,它们将会串行执行. 可以通过查看Vector.Hashtable等同步容器的实现代码,可以看到这些容器实现线程安全的方式就是将它们的状态封装起来,并在需要同步的方法上加上关键字synchronized,但在某

java学习笔记 --- 多线程(多线程的控制)

1.线程休眠   public static void sleep(long millis) public class ThreadSleep extends Thread { @Override public void run() { for (int x = 0; x < 100; x++) { System.out.println(getName() + ":" + x + ",日期:" + new Date()); // 睡眠 // 困了,我稍微休息1

Java学习笔记—多线程(一)

程序.进程和线程 程序:一段静态的代码,一组指令的有序集合,不运行的话只是一堆代码. 程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称之为进程.也就是说进程是系统进行资源分配和调度的一个独立单位,每个进程都有自己单独的地址空间.所以说程序与进程的区别在于,程序是指令的集合,是进程运行的静态描述文本,而进程则是程序在系统上顺序执行时的动态活动. 进程:运行中的程序称为进程,拥有系统资源(cpu.内存). 但是进程存在着很多缺陷,主要集中在两点: 进程只能在

Java学习笔记—多线程(二)

Java线程常用方法总结 1.join()方法 join -- 让一个线程等待另一个线程完成才继续执行.如A线程线程执行体中调用B线程的join()方法,则A线程被阻塞,知道B线程执行完为止,A才能得以继续执行. public class MyRunnable implements Runnable{ @Override public void run() { for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getN

Java学习笔记—多线程(java.util.concurrent.locks包,转载)

一.synchronized的缺陷 synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完了该代码块,然后线程释放对锁的占有: 2)线程执行发生异常,此时JVM会让线程自动释放锁. 那么如果这个获取锁的线程由于要等待IO或者其他原因(比