当前位置:首页 > Java技术 > 《Java多线程编程核心技术》学习笔记(1)

《Java多线程编程核心技术》学习笔记(1)

2022年08月05日 11:34:27Java技术6

一、实现多线程的编程方式

(1)继承Thread类

public class MyThread extends Thread {
     
   @Override
   public void run() {
     
      super.run();
      System.out.println("MyThread");
   }
}
public class Run {
     

   public static void main(String[] args) {
     
      MyThread mythread = new MyThread();
      mythread.start();
      System.out.println("运行结束!");
   }

}

(2)实现Runnable接口

public class MyRunnable implements Runnable {
     
   @Override
   public void run() {
     
      System.out.println("运行中!");
   }
}
public class Run {
     

   public static void main(String[] args) {
     
      Runnable runnable=new MyRunnable();
      Thread thread=new Thread(runnable);
      thread.start();
      System.out.println("运行结束!");
   }

}

二、实例变量与线程安全

i - - 的操作分为3步:

  • 取得原有i值。
  • 计算i-1。
  • 对i进行赋值。

如果有多个线程同时访问,那么会存在非线程安全的问题。这个时候可以用到关键字:synchronized

public class MyThread extends Thread {
     

   private int count=5;
   
   @Override
   synchronized public void run() {
     
      super.run();
         count--;
         System.out.println("由 "+this.currentThread().getName()+" 计算,count="+count);
   }
}
public class Run {
     
   public static void main(String[] args) {
     
      MyThread mythread=new MyThread();

      Thread a=new Thread(mythread,"A");
      Thread b=new Thread(mythread,"B");
      Thread c=new Thread(mythread,"C");
      Thread d=new Thread(mythread,"D");
      Thread e=new Thread(mythread,"E");
      a.start();
      b.start();
      c.start();
      d.start();
      e.start();
   }
}

三、currentThread()方法

用于返回代码段正在被哪个线程调用的信息。

public class MyThread extends Thread {
     

   public MyThread() {
     
       System.out.println("构造方法的打印:" 
+ Thread.currentThread().getName());
   }

   @Override
   public void run() {
     
       System.out.println("run方法的打印:" 
+ Thread.currentThread().getName());
   }

}

public class Run1 {
     
    public static void main(String[] args) {
     
        System.out.println(Thread.currentThread().getName());
    }
}
public class Run2 {
     
    public static void main(String[] args) {
     
        MyThread mythread = new MyThread();
        // mythread.start();
        mythread.run();
    }
}

运行结果:

Run2 Run2
构造方法的打印: main main
run方法的打印: Thread-0 main

四、isAlive()方法

判断当前线程是否处于活动状态

五、sleep()方法

方法sleep()的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行)。这个正在执行的线程是指this.currentThread()返回的线程。

六、getId()方法

取得线程的唯一标识。

七、停止线程

1)停止不了的线程 - interrupt()

调用interrupt()方法仅仅是在当前线程中打了一个停止的标记,并不是真正的停止了线程。

2)判断线程是否停止状态

this.interrupted():测试当前线程是否已经是中断状态,执行后具有将状态标志清除为false的功能。
this.isInterrupted():测试线程Tread对象是否已经是中断状态,但不清除状态标志。

3)能停止的线程——异常法

在线程中用for语句来判断一下线程是否是停止状态,如果是停止状态,则后面的代码不再运行即可。
关键代码:for循环中break。

4)在沉睡中停止

sleep()

5)能停止的线程——暴力停止

stop()

6)能停止的线程——return

八、暂停线程

暂停线程意味着此线程还可以恢复运行。在java多线程中,可以使用suspend() 方法暂停线程,使用resume() 方法恢复线程的执行。

1)suspendresume的缺点——独占

2)suspendresume的缺点——不同步

九、yield方法

yield()是放弃当前的cpu资源,将它让给其他任务去占用cpu执行时间。但是放弃的时间不确定,有可能刚刚放弃,就又获得了cpu时间片。

十、线程的优先级

setPriority()方法可以设置线程的优先级。

1)线程的优先级具有继承性

2)线程的优先级具有规则性

cpu尽量将执行资源让给优先级比较高的线程,但不代表高优先级的线程全部先执行完。

3)线程的优先级高的运行的快

十一、守护线程

守护线程的作用是为其他线程的运行提供便利的服务,最典型的是GC(垃圾回收器)。

public class MyThread extends Thread {
     
   private int i = 0;

   @Override
   public void run() {
     
      try {
     
         while (true) {
     
            i++;
            System.out.println("i=" + (i));
            Thread.sleep(1000);
         }
      } catch (InterruptedException e) {
     
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
}
public class Run {
     
   public static void main(String[] args) {
     
      try {
     
         MyThread thread = new MyThread();
         thread.setDaemon(true);
         thread.start();
         Thread.sleep(5000);
         System.out.println("我离开thread对象也不再打印了,也就是停止了!");
      } catch (InterruptedException e) {
     
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
}

作者:第七人格
来源链接:https://blog.csdn.net/a18602320276/article/details/87895454

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17598.html

分享给朋友:

“《Java多线程编程核心技术》学习笔记(1)” 的相关文章

Java空指针异常解决java.lang.NullPointerException解决心得

Java空指针异常解决java.lang.NullPointerException解决心得

今天做课设的时候运行程序报出以下错误 java.lang.NullPointerException 首先要理解的是此错误并不会在 程序中报错,只会在运行的时候报错。 是由于某个参数(集合,数组等数据)可能出现一个null值而导致后面的程序不能运行时...

一分钟搞定Java环境变量配置

一分钟搞定Java环境变量配置

对于学Java的人来说,成功配置环境变量是第一步,因为后期不论 你做什么工作,会发现都需要这些,接下来介绍如何安装与配置,我按照jdk1.6来说明,其他一致。 下载官网 首先将jdk安装好后进行配置。 右击“计算机”,右键打开“属性”,...

Java 并发核心机制

Java 并发核心机制

📦 本文以及示例源码已归档在 javacore 一、J.U.C 简介 Java 的 java.util.concurrent 包(简称 J.U.C)中提供了大量并发工具类,是 Java 并发能力的主要体现(注意,不是全部,有部分并发能力的支持在其他包中)。...

Java 内存模型

Java 内存模型

📦 本文以及示例源码已归档在 javacore Java 内存模型(Java Memory Model),简称 JMM。 JVM 中试图定义一种 JMM 来屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。...

Java 日志框架详解

Java 日志框架详解

1. JUL学习 JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框 架使用方便,学习简单,能够在小型应用中灵活使用。 1.1 架构介绍 Loggers...

JDBC连接时所犯错误1.字符集设置不合适2.连接MySQL8.0社区版时时区不一致3..包名不能以Java.命名4.驱动被弃用

Microsoft JDBC Driver 的主页为:https://msdn.microsoft.com/en-us/data/aa937724.aspx 下载所需驱动 今天连接时报了四次错,记录下来 1.java.sql.SQLException:...

冒泡排序的原理,思路,以及算法分析(Java实现)

冒泡排序的原理,思路,以及算法分析(Java实现)

冒泡排序 如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式。 1.原理:比较两个相邻的元素,将值大的元素交换到右边 2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。 (1)第一次比较:首先比较第...

Java实现素数的判断

素数的定义只能被1和它本身整除,不包括1 例 2.3.5.7.11.13 实现代码 Scanner in=new Scanner(System.in); int n ; n=in.nextInt(); for(int n1=2;n1&l...

枚举法 之Java实现凑硬币

问题? 如何利用1元五元十元凑硬币 Scanner in=new Scanner(System.in); int amout ; amout=in.nextInt(); for(int one =0;one<=amout;one+...

二分法(折半查找)的运用之java实现猜数字游戏

让计算机输入一个数 然后用户进行猜数游戏 一般而言,七次会猜对,如果猜不对,那么就是你的方法不对 在这儿涉及到的一个算法就是二分法 ***二分法查找,***也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下: (1)首先,从数组...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。