java线程理解002

本章节主要是学习一种新的创建线程的方法,熟悉线程的常用方法,线程同步。

  1. 利用实现Runnable接口创建一个新的线程。

     1 package interThread_v001;
     2
     3 public class Runable_v001 implements Runnable
     4
     5 {
     6     // 线程体
     7
     8     public void run()
     9
    10     {
    11         for(int i=0; i<100; i++)
    12         {
    13
    14             System.out.println("RunnableThread-->" +i);
    15
    16             // 线程休眠,休眠结束后进入就绪状态,开始抢占Cpu
    17
    18             if(i == 50)
    19
    20             {
    21                 try{
    22                     Thread.sleep(2000);
    23                     System.out.println("Sleeping 2000ms");
    24
    25                 }
    26                 catch(Exception e){
    27                     System.out.println(e);
    28
    29                 }
    30             }
    31             //让出线程资源-->CPU资源,但是会立马去抢占CPU
    32             if( i == 70)
    33             {
    34                 Thread.yield();
    35                 System.out.println("yield");
    36             }
    37         }
    38     }
    39 }
  1. 在主函数中先实例化接口实现类,后将该对象作为参数传入到Thread t = new Thread(对象);构造函数中。
 1 package interThread_v001;
 2 public class Runable_Test_v001
 3
 4 {
 5
 6     public static void main(String args[])
 7
 8     {
 9
10         // 先实例化Runnable的接口实现类
11
12         Runable_v001 rv = new Runable_v001();
13
14         // 直接用Thread实例化对象,并把Runnable的接口实现类对象作为参数传入
15
16         Thread t = new Thread(rv);
17
18         // 启动线程
19
20         t.start();
21
22         //设置线程为最大等级
23
24         t.setPriority(Thread.MIN_PRIORITY);
25
26         //获取当前线程的等级
27
28         System.out.println("当前线程等级-->" +t.getPriority());
29
30         //主线程中的执行方法
31
32         for(int i=0; i<100; i++)
33
34         {
35             System.out.println("mainThread-->" +i);
36         }
37     }
38 }

线程的主要方法

线程同步

当有多个线程时,调用同一段线程体,有可能就会出现错误。

如何控制线程不出现错误,就要使用一个线程同步方法——同步代码块 synchronized(this){} ,使用该方法可以确保两个线程对象调用统一个线程体时,该线程体执行完之后才被第二个线程调用。

线程实现类:

 1 package interThread_v001;
 2
 3 public class Sync_v001 implements Runnable
 4
 5 {
 6     // 实现线程体
 7
 8     public void run()
 9
10     {
11         int i = 100;
12
13         // 线程代码块
14
15         while (true)
16
17         {
18             // 同步代码块
19             synchronized (this)
20             {
21
22                 // 获取当前线程的名字
23
24                 System.out.println(Thread.currentThread().getName() + "-->" + i);
25
26                 // i 自减
27
28                 i--;
29
30                 // 让出线程占用资源
31
32                 Thread.yield();
33
34                 // 退出while循环
35
36                 if (i < 0)
37
38                 {
39                     break;
40                 }
41             }
42         }
43     }
44 }

测试类:

 1 package interThread_v001;
 2
 3 public class Sync_Testv001
 4
 5 {
 6
 7     public static void main(String args[])
 8
 9     {
10
11         // 接口实现类实例化对象
12
13         Sync_v001 sThread1 = new Sync_v001();
14
15         Sync_v001 sThread2 = new Sync_v001();
16
17
18
19         // 实例化线程
20
21         Thread t1 = new Thread(sThread1);
22
23         Thread t2 = new Thread(sThread2);
24
25         t1.setName("线程1");
26
27         t2.setName("线程2");
28
29         //启动线程
30
31         t1.start();
32
33         t2.start();
34
35     }
36
37 }
时间: 2024-10-29 19:11:36

java线程理解002的相关文章

java线程理解001

概念:线程和进程 进程:简单的说,进程就是一个应用,即一个程序.现在的操作系统普遍都是多进程的操作系统.比如:你可以同时打开音乐播放器,也可以同时打开浏览器和视频播放器. 线程:线程,存在于进程之中,理解为一个进程中有多个线程.现在的程序也大多是多线程程序.比如:一个音乐播放器既可以同时播放音乐,也可以同时下载音乐. 单线程和多线程的执行顺序: 单线程程序执行:线程执行逐步向下,最终结束. 多线程程序执行:两个线程间快速切换(抢夺CPU资源),获得CPU资源的执行向下 注:多线程本质上也是单线程

java 线程理解

线程创建有两种方式: 1.实现runnable接口  2.继承thread 线程   都重写run方法 2.runnable接口优势: java 单继承但可以实现多个接口 runnable 方式可以实现多线程共享一个公用资源 3.线程的生命周期:见下图 4.那么sleep 和 wait 是什么? 用于暂停线程使其他线程获取CUP时间片进行执行 5.各自区别: sleep 是 thread 的方法   意义:等待多少毫秒后再唤醒且不会释放对象锁 wait 是object 方法 需要通过notify

Java线程工作内存与主内存变量交换过程及volatile关键字理解

Java线程工作内存与主内存变量交换过程及volatile关键字理解 1. Java内存模型规定在多线程情况下,线程操作主内存变量,需要通过线程独有的工作内存拷贝主内存变量副本来进行.此处的所谓内存模型要区别于通常所说的虚拟机堆模型: 2. 线程独有的工作内存和进程内存(主内存)之间通过8中原子操作来实现,如下图所示: 原子操作的规则(部分): 1) read,load必须连续执行,但是不保证原子性. 2) store,write必须连续执行,但是不保证原子性. 3) 不能丢失变量最后一次ass

深入理解 Java 线程池

目录   一.简介  二.Executor 框架  三.ThreadPoolExecutor  四.Executors  参考资料 一.简介 什么是线程池 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务. 为什么要用线程池 如果并发请求数量很多,但每个线程执行的时间很短,就会出现频繁的创建和销毁线程.如此一来,会大大降低系统的效率,可能频繁创建和销毁线程的时间.资源开销要大于实际工作的所需. 正是由于这个问题,所以有必要引入线程池.使用 线程池的好处 有

java线程的理解

java thread类都是native方法实现的,所以没有用平台无关的方法实现,怎么实现的呢? 线程的实现: 第一种:使用内核线程实现. 内核线程就是直接使用操作系统内核支持的线程,由内核完成切换. 程序一般不会直接使用内核线程,而是使用内核线程的一种高级接口——轻量级进程,即通常意义上的线程.每个轻量级线程都要有一个内核线程支持,所以会消耗一定的内核资源. 而且因为是基于内核实现的,所以线程的操作需要系统调用,代价较高 2.用户线程 一般意义上来说只要不是内核线程都是用户线程,但是轻量级线程

由浅入深理解Java线程池及线程池的如何使用

前言 多线程的异步执行方式,虽然能够最大限度发挥多核计算机的计算能力,但是如果不加控制,反而会对系统造成负担.线程本身也要占用内存空间,大量的线程会占用内存资源并且可能会导致Out of Memory.即便没有这样的情况,大量的线程回收也会给GC带来很大的压力. 为了避免重复的创建线程,线程池的出现可以让线程进行复用.通俗点讲,当有工作来,就会向线程池拿一个线程,当工作完成后,并不是直接关闭线程,而是将这个线程归还给线程池供其他任务使用. 接下来从总体到细致的方式,来共同探讨线程池. 总体的架构

java 线程详解

5月7号  周末看了一下线程方面的内容 ,边看视频边看书还附带着参考了很多人的博客,一天的收获,写下来整理一下:感觉收获还是挺多的:过段时间可能看完java  这几大块要去看一下关于spring boot  的内容顺便  也整理一下:附上我参考的 几本书: 关于java  线程,首先要了解一下线程和进程之间的关系.区别以及他们之间的概念: 首先是线程: 什么是线程? 线程是在程序执行过程中能够执行部分代码的一个执行单元,也看看做是一个轻量级的进程:线程是程序内的程序控制流只能使用程序内分配给程序

java线程详细介绍

目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程的区别: 进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1

Java线程经典面试题

53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒.Java在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点. 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并