摘要:
本文采用java多线程实现了模拟车站多个车票卖票的功能。关键词:java多线程 并发 共享资源 互斥访问 实现runnable接口 volatile 线程同步。关键:线程同步,因为创建了多个线程,那么卖票部分代码应该上锁来保证线程对此关键代码的互斥访问,上锁的方式有两种,一种是synchronize... 阅读全文
摘要:
java中volatile关键字的使用涉及到java的内存模型,JMM。简单来说,每个线程都有一个本地内存(虚拟的),线程共享的变量存储在主内存中,主内存在堆中。内存访问方式如下图所示。volatile的作用总结如下:(1)可见性:对一个volatile变量的读取,总是能够看到(任意线程)对这个变量... 阅读全文
摘要:
1、为什么需要编程语言?“上帝赋予人类说话的能力,而言语又创造了思想,思想史人类对宇宙的量度。”有了编程语言,我们才能真正与计算机“对话”,计算机还可以与其他人对话,这样“人-计算机-人”就联系在了一起。2、C语言、C++、java有什么不同?C语言的优势在于底层,所以在嵌入式开发等涉及底层硬件应用... 阅读全文
摘要:
Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组、链表以及二叉排序树等相比较有很明显的区别,它能够快速定位到想要查找的记录,而不是与表中存在的记录的关键字进行比较来进行查找。这个源于Hash表设计的特殊性,它采用了函数映射的思想将记录的存储位置与记录的关键字关联起来... 阅读全文
摘要:
查找算法一、查找的基本概念查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。二、顺序查找针对无序序列的一种最简单的查找方式。时间复杂度为O(n)。三、二分查找(折半查找)针对已排序序列的一种查找方式。并且只适用于顺序存储结构的序列。要求序列中的元素基本不变,在... 阅读全文
摘要:
深入理解Java内存模型(一)——基础并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间... 阅读全文
摘要:
对于并发工作,你永远不知道一个线程何时运行,你需要某种方式来避免两个任务访问相同的资源,即要避免资源竞争,至少在关键代码上不能出现这样的情况,否则多个线程同时对某个内存区域操作会导致数据破坏。程序代码中的临界区是需要互斥访问的,同一时刻只能有一个线程来访问临界区,也就是线程对临界区的访问时互斥的。竞... 阅读全文
摘要:
1、定义:Hash表是一种重要的数据结构。它通过将关键字通过hash函数映射到一个内存区,通过关键字就可以直接访问该节点的值。其查找的时间复杂度为O(1)Hash表也叫做散列表。它通过将关键字的值(key)通过hash函数映射到内存区中,然后在响应的内存区中可以存入相应的值(value),也就是我们... 阅读全文
摘要:
在日常的算法中,查找是一个经常涉及到的话题,而如何提高查找的速度,也是很多程序员、软件研究的话题。1、问题的提出:有这样一个数据类型S:学生姓名(name),性别(sex),年龄(age)。。。,现在假设有这样一个需求;文件A、B中分别存放大量S的记录,需要将A、B中重复的记录去掉。我们用c代... 阅读全文
摘要:
Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的r... 阅读全文