java多线程实例_要把Java吃透您得先吃透这些基本概念

7f71abd6784ccc3aeabc631e29bd7584.png

学习好比盖房子,打地基好很重要,房了能盖多高关键看地基;学习同样道理,基础知识是以后学习一切技术的必要条件,我们在准备学习一门开发语言时,首先要学习它的基础,不仅要会,更要融会贯通;万变不离其宗,无论技术框架怎么变,本质都是对基础的封装再造。

在以往的工作学习中,笔者总结了一些Java非常重要的知识点或者说基本概念,进入正题:

d50b9f39285684d9484a2ecbc558a6a0.png

1、面向对象编程(OOP):OOP最重要的思想是类,类是模板,从类中构造一个对象,即创建了这个类的一个实例;

2、封装:是把数据和行为结合在一起,并对对象使用者隐藏数据的实现过程,通常一个对象中的数据叫他的实例字段(instance field) ;

3、继承:Java中允许在已经存在的类的基础上构建新的类,当你继承一个已经存在的类时,那么你就复用了这个类的方法和字段,同时你可以在新类中添加新的方法和字段;

4、多态:在java中,对象变量是多态的;需要注意的是java中不支持多重继承;

5、类之间的关系:

use-a :依赖关系 ;

has-a :聚合关系 ;

is-a : 继承关系--例:A类继承了B类,此时A类不仅有了B类的方法,还有其自己的方法;

6、构造对象使用构造器:构造器是一种特殊的方法,它的作用是构造对象并对其初始化,

构造器特点:构造器可以有0个,一个或多个参数 ;

构造器和类名称是相同的;

一个类可以有多个构造器;

构造器没有返回值;

构造器一定是和new运算符一起使用的;

0ce2aadbd56e7f6072cafb118e91500b.png

7、包(package):Java允许把一个或多个类放在一起成为一组,称作为包,以便于更好的管理,标准Java库分为许多包如java.lang、java.util、java,net等,包是分层次的,所有的java包都在java和javax包层次内;

8、重载:当多个方法具有相同的名字而含有不同的参数时,这时就发生了重载,编译器会选出调用哪个方法;

9、健壮特性:Java采取了一个安全指针模型,能有效防止重写内存和数据崩溃;

10、安全:Java可以用来构建防病毒和防攻击的系统,事实证明Java在防毒方面做的比较好;

11、可移植性:Java中对基本数据结构类型的大小和算法都有严格的规定,所以有很好的可移植性;

12、多线程:由于Java的机制,它处理多线程的过程很简单,Java把多线程实现交给底下操作系统或线程程序完成,所以多线程是Java作为服务器端开发语言的流行原因之一;

13、动态绑定:这是Java调用对象方法的机制;

14、Java中的每一个类都是从Object类扩展而来的;

15、内部类:一个内部类的定义是定义在另一个内部类中;

以上只列出了比较重要的,必须掌握的知识点。如果还有可以补充说明,有不正确的地方欢迎大家批评指正!!!

6fedfca67219b3b7a9b36f3298bbf6ca.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Java 多线程队列实例,模拟队列实现排队叫号的过程: ```java import java.util.LinkedList; import java.util.Queue; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class QueueExample { private Queue<Integer> queue = new LinkedList<>(); private Lock lock = new ReentrantLock(); private int currentTicketNumber = 0; public void addCustomer() { lock.lock(); try { queue.offer(currentTicketNumber++); System.out.println("新顾客取得号码:" + (currentTicketNumber - 1) + ",当前队列长度:" + queue.size()); } finally { lock.unlock(); } } public void serveCustomer() { lock.lock(); try { Integer ticketNumber = queue.poll(); if (ticketNumber == null) { System.out.println("队列为空,无法叫号"); } else { System.out.println("叫到号码:" + ticketNumber + ",当前队列长度:" + queue.size()); } } finally { lock.unlock(); } } public static void main(String[] args) { final QueueExample queueExample = new QueueExample(); // 开启 5 个线程模拟 5 个顾客取号 for (int i = 0; i < 5; i++) { new Thread(new Runnable() { @Override public void run() { queueExample.addCustomer(); } }).start(); } // 开启 3 个线程模拟 3 个服务员叫号 for (int i = 0; i < 3; i++) { new Thread(new Runnable() { @Override public void run() { queueExample.serveCustomer(); } }).start(); } } } ``` 这个例子中,我们定义了一个 `QueueExample` 类,其中有一个 `queue` 队列,用于存储所有顾客的票号。我们使用 `ReentrantLock` 类来实现线程安全。在 `addCustomer` 方法中,我们通过 `offer` 方法往队列中添加一个顾客的票号,并输出当前队列长度以及新顾客的票号。在 `serveCustomer` 方法中,我们通过 `poll` 方法从队列中获取一个顾客的票号,并输出当前队列长度以及叫到的顾客的票号。 在 `main` 方法中,我们开启了 5 个线程模拟 5 个顾客取号,以及 3 个线程模拟 3 个服务员叫号。你可以运行这个例子来看一下具体的输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值