java多线程核心技术(java多线程核心技术pdf百度云)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
本篇文章给大家谈谈java多线程核心技术,以及java多线程核心技术pdf百度云对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
- 1、《java多线程编程核心技术》和《java并发编程的艺术》两本书的异同
- 2、求《Java多线程编程核心技术(高洪岩0》全文免费下载百度网盘资源,谢谢~
- 3、java多线程编程核心技术怎么样
- 4、元素的localname是什么
《java多线程编程核心技术》和《java并发编程的艺术》两本书的异同
区别很大:
《java多线程编程核心技术》:
这本书让你入个门,整体上了介绍一些并发编程的基本API、常见场景和一些坑,推荐先看这本书,比较简单,适合新手,但是原理不够深入
和《java并发编程的艺术》
这本书从底层和实现原理开始讲起,深入java内存模型和处理器的知识讲解并发编程的实现原理,适合有一定基础的人看

求《Java多线程编程核心技术(高洪岩0》全文免费下载百度网盘资源,谢谢~
《Java多线程编程核心技术(高洪岩0》百度网盘pdf最新全集下载:
链接:
?pwd=r6cy 提取码: r6cy
简介:本书以浅白的措辞,结合大量实例,全面讲解Java多线程编程中的并发访问、线程间通信、锁等最难突破的技术与应用实践。
java多线程编程核心技术怎么样
java多线程核心技术挺好的。
线程可以理解为是在进程中独立运行的子任务。
Java多线程
使用方法
Java中实现多线程主要有以下两种方法:
继承Thread,而后实例化该对象调用start()即启动了新线程;
实现Runnable,通过new Thread(Runnable run)实例化该线程,而后调用start()
元素的localname是什么
zhangmiao14
博客园 首页 联系 管理
随笔 - 122 文章 - 0 评论 - 44 阅读 - 26万
Android之SAX解析XML
一.SAX解析方法介绍
SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备。
SAX解析器是一种基于事件的解析器,事件驱动的流式解析方式是,从文件的开始顺序解析到文档的结束,不可暂停或倒退。它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的。当事件源产生事件后,调用事件处理器相应的处理方式,一个事件就可以得到处理。在事件源调用事件处理器中特定方法的时候,还要传递给事件处理器相应事件的状态信息,这样事件处理器才能够根据提供的事件信息来决定自己的行为。并且,它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当前读到的字符是否合法XML语法中的某部分,如果符合就会触发事件。所谓事件,其实就是一些回调(callback)方法,这些方法(事件)定义在ContentHandler接口。
在SAX接口中,事件源是org.xml.sax包中的XMLReader,它通过parser()方法来解析XML文档,并产生事件。事件处理器是org.xml.sax包中ContentHandle、DTDHandler、ErrorHandler以及EntityResolver这4个接口。XMLReader通过相应事件处理器注册方法setXXX()来完成的与ContentHandle、DTDHandler、ErrorHandler以及EntityResolver这4个接口的连接。
什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。一个可以产生事件的对象叫做事件源,而一个可以针对事件做出响应的对象就被叫做事件处理器。
优点:不用实现调入整个文档,占用资源少。尤其在嵌入式环境中,如android,极力推荐使用SAX解析。
缺点:不像DOM解析一样将文档长期驻留在内存中,数据不是持久的。如果事件过后没有保存数据,数据就会丢失。
使用场合:机器有性能限制。
二、SAX解析步骤
1.创建SAXParserFactory对象
SAXParserFactory spf = SAXParserFactory.newInstance();
2.根据SAXParserFactory.newSAXParser()方法返回一个SAXParser解析器
SAXParser saxParser = spf.newSAXParser();
3.实例为一个DefaultHandler对象
复制代码
public class XMLContentHandler extends DefaultHandler {
//接收文档开始的通知。当遇到文档的开头的时候,调用这个方法,可以在其中做一些预处理。
@Override
public void startDocument() throws SAXException {
...
}
//接收元素开始的通知。当读到一个开始标签的时候,会触发这个方法。其中uri表示元素的命名空间;
//localName表示元素的本地名称(不带前缀);qName表示元素的限定名(带前缀);attrs表示元素的属性集合。
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
...
}
//接收字符数据的通知。改方法用来处理在XML文件中读到的内容,第一个参数用来存放文件的内容,后面两个参数
//是读到的字符串在这个数组中的起始位置和长度。使用newSreing(ch,start,length)就可以获取内容。
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
...
}
//接收文档的结尾的通知。在遇到结束标签的时候,调用这个方法。其中,uri表示元素的命名空间;
//localName表示元素的本地名称(不带前缀);name表示元素的限定名(带前缀)。
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
...
}
复制代码
4.调用SAXParser的parser方法从输入源中获取到XML数据
saxParser.parse(inputStream, handler);
inputStream.close();
也可以使用XMLReader的parse方法从输入源中获取到XML数据。
5.通过DefaultHandler返回我们需要的数据集合。
handler.getPersons();
三、SAX解析XML代码
1.创建一个XML文件itcase.xml,并将其放在res/raw文件夹下。
复制代码
?xml version="1.0" encoding="UTF-8"?
persons
person id="23"
nameliming/name
age30/age
/person
person id="20"
namelixiangmei/name
age25/age
/person
/persons
复制代码
如果没有raw文件夹,就在res文件夹下创建一个raw文件夹,并创建xml文件。
2.修改视图
复制代码
Button
android:id="@+id/sax_button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/fab_margin"
android:gravity="center_horizontal"
android:text="@string/SAX" /
Button
android:id="@+id/sax_button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/fab_margin"
android:gravity="center_horizontal"
android:text="@string/SAX" /
TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" /
复制代码
3.添加XMLContentHandler类
复制代码
package com.zhangmiao.analyzexmldemo;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.ArrayList;
import java.util.List;
/**
* Created by zhangmiao on 2016/12/13.
*/
public class XMLContentHandler extends DefaultHandler {
private ListPerson persons = null;
private Person currentPerson;
private String tagName = null;
public ListPerson getPersons() {
return persons;
}
@Override
public void startDocument() throws SAXException {
persons = new ArrayList();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
if (localName.equals("person")) {
currentPerson = new Person();
currentPerson.setId(Integer.parseInt(attributes.getValue("id")));
}
this.tagName = localName;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
if (tagName != null) {
String data = new String(ch, start, length);
if (tagName.equals("name")) {
this.currentPerson.setName(data);
} else if (tagName.equals("age")) {
this.currentPerson.setAge(Short.parseShort(data));
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (localName.equals("person")) {
persons.add(currentPerson);
currentPerson = null;
}
this.tagName = null;
}
}
复制代码
4.添加AnalyzeSAM类
复制代码
package com.zhangmiao.analyzexmldemo;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* Created by zhangmiao on 2016/12/14.
*/
public class AnalyzeSAX {
public static ListPerson readXML(InputStream inputStream) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser();
XMLContentHandler handler = new XMLContentHandler();
saxParser.parse(inputStream, handler);
inputStream.close();
return handler.getPersons();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static ListPerson readXML(InputSource inputSource) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParser = spf.newSAXParser();
XMLReader reader = saxParser.getXMLReader();
XMLContentHandler handler = new XMLContentHandler();
reader.setContentHandler(handler);
reader.parse(inputSource);
inputSource.getByteStream().close();
return handler.getPersons();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
复制代码
5.修改MainActivity类
复制代码
package com.zhangmiao.analyzexmldemo;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import org.xml.sax.InputSource;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private static final String TAG = "AnalyzeXMLDemo";
private TextView mTextView;
private InputStream inputStream;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.v(TAG, "onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
Button saxButton1 = (Button) findViewById(R.id.sax_button1);
Button saxButton2 = (Button) findViewById(R.id.sax_button2);
mTextView = (TextView) findViewById(R.id.text);
saxButton1.setOnClickListener(this);
saxButton2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
String result = "";
inputStream = getResources().openRawResource(R.raw.itcase);
switch (v.getId()) {
case R.id.sax_button1:
result += "--------- SAX1 ---------" + "\n";
if (inputStream == null) {
result = "inputStream is null";
} else {
ListPerson personList = AnalyzeSAX.readXML(inputStream);
if (personList != null) {
for (int i = 0; i personList.size(); i++) {
String message = "id = " + personList.get(i).getId() + " , name = " + personList.get(i).getName()
+ " , age = " + personList.get(i).getAge() + ".\n";
result += message;
}
}
}
mTextView.setText(result);
break;
case R.id.sax_button2:
result += "--------- SAX2 ---------" + "\n";
InputSource inputSource = new InputSource();
inputSource.setByteStream(inputStream);
if (inputSource == null) {
result = "inputStream is null";
} else {
ListPerson personList = AnalyzeSAX.readXML(inputSource);
if (personList != null) {
for (int i = 0; i personList.size(); i++) {
String message = "id = " + personList.get(i).getId() + " , name = " + personList.get(i).getName()
+ " , age = " + personList.get(i).getAge() + ".\n";
result += message;
}
}
}
mTextView.setText(result);
break;
default:
break;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
复制代码
参考文章:
标签: Android
好文要顶 关注我 收藏该文
zhangmiao14
粉丝 - 27 关注 - 6
+加关注
0 0
« 上一篇: Android之Dedug--Circular dependencies cannot exist in AnimatorSet
» 下一篇: Android之DOM解析XML
posted on 2016-12-15 15:40 zhangmiao14 阅读(1601) 评论(0) 编辑 收藏 举报
刷新评论刷新页面返回顶部
登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页
编辑推荐:
· dotnet 代码优化 聊聊逻辑圈复杂度
· 一个棘手的生产问题,但是我写出来之后,就是你的了
· 你可能不知道的容器镜像安全实践
· .Net 6 使用 Consul 实现服务注册与发现
· SQLSERVER 的复合索引和包含索引到底有啥区别?
阅读排行:
· Redux与前端表格施展“组合拳”,实现大屏展示应用的交互增强
· dotnet 代码优化 聊聊逻辑圈复杂度
· 博客园主题修改分享 - 过年篇
· gRPC入门与实操(.NET篇)
· 如何优雅地校验后端接口数据,不做前端背锅侠
昵称: zhangmiao14
园龄: 8年8个月
粉丝: 27
关注: 6
+加关注
2023年1月
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
最新随笔
1.2020 年总结,2021 年计划
2.2019年总结,2020年计划
3.[网络]HTTP
4.Java多线程编程核心技术-第7章-拾遗增补-读书笔记
5.Java多线程编程核心技术-第6章-单例模式与多线程-读书笔记
6.Java多线程编程核心技术-第5章-定时器 Timer-读书笔记
7.Java多线程编程核心技术-第4章-Lock的使用-读书笔记
8.Java多线程编程核心技术-第3章-线程间通信-读书笔记
9.Java多线程编程核心技术-第2章-对象及变量的并发访问-读书笔记
10.Java多线程编程核心技术-第1章-Java多线程技能-读书笔记
我的标签
Android(45)
书籍阅读笔记(35)
Android之debug(10)
其他技术(10)
Java(5)
总结(4)
Android组件(3)
Android之View(3)
Android开发技术周报学习记录(3)
翻译(2)
更多
积分与排名
积分 - 144331
排名 - 8300
随笔档案 (122)
2021年1月(1)
2020年1月(1)
2019年11月(1)
2019年9月(5)
2019年8月(2)
2019年4月(7)
2019年3月(3)
2019年2月(7)
2019年1月(6)
2018年12月(4)
2018年11月(3)
2018年10月(5)
2018年9月(5)
2018年8月(2)
2018年7月(4)
更多
阅读排行榜
1. Unity之Animation动画(51984)
2. Android百度地图开发-第一篇:申请、搭建百度地图(15357)
3. Lottie的使用(11916)
4. 通知栏Notification的整理(10777)
5. Android之.9图的知识(10428)
评论排行榜
1. 2016总结,2017计划(15)
2. 2018 总结,2019 计划(14)
3. Android之Pull解析XML(3)
4. 从一个字符串中剔除连续的字符,只留一个。(2)
5. Android之SQLite数据存储(2)
推荐排行榜
1. 2018 总结,2019 计划(7)
2. 面试之Java知识整理(3)
3. 通知栏Notification的整理(2)
4. 2020 年总结,2021 年计划(1)
5. Android6.0以上关于RecyclerView显是不全的问题(1)
最新评论
1. Re:2020 年总结,2021 年计划
小姐姐,该写2021总结了哦~期待 ❤
--Will_Yang20211213
2. Re:TextView文字描边实现
控件在动态设置文字的时候会有bug,边框还是原来的。建议加上 @Override public void setText(CharSequence text, BufferType type) { s...
--一滩花生酱
3. Re:Android之Pull解析XML
挺好啊 看得懂的 补充下知识点
--冬瓜小生
4. Re:Unity之Animation动画
test answer..
--minosletitgo
5. Re:2018 总结,2019 计划
@ SkySeraph谢谢,共勉。...
--zhangmiao14
Powered by: 博客园 Copyright © 2023 zhangmiao14
Powered by .NET 7.0 on Kubernetes
关于java多线程核心技术和java多线程核心技术pdf百度云的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
