文档章节

java基础知识篇

学海无涯_
 学海无涯_
发布于 2017/06/04 11:19
字数 922
阅读 15
收藏 0

1.java序列化到底是什么

    序列化是一种用来处理对象流的机制 ,所谓对象流就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

    ps:使用场景

         分布式数据传输 , 网络传输

         根本应用场景是:
           1.当对象需要被网络传输时
           2.对象状态需要被持久化时

         典型应用 :

         tomcat关闭以后会把session对象序列化到SESSIONS.ser文件中,等下次启动的时候就把这些session再加载到内存里面来。

2.线程安全、线程不安全

    概念:

    线程安全就是多线程访问的时候,采用了加锁机制,当前线程访问的时候其他线程不能访问。

    线程不安全就是不提供数据访问保护,可能出现脏数据。

    如果你的程序是多线程执行,然后执行结果和预期的一致,那么就是线程安全的。

    线程安全问题都是由全局变量及静态变量引起的。

    若每个线程对全局变量,静态变量只有读,没有写操作,那么也是线程安全的。若多线程同时执行写操作,那么就需要考虑线程同步。

3.java对象锁应用

    锁,java中只要加synchronized关键字即可,可以加到方法上,也可以加到代码块中

public synchronized String get(){
     return null;
}  

public String get(){
     synchronized{
        //代码;
     }
     return null;
}

    

/**
 * 当前是多个线程用一个SyncV1对象,所以,synchronized执行过程中同一时间只能有一个拿到锁
 * 因此,执行结果为 
 * 	test开始..
	test结束..
	test开始..
	test结束..
	test开始..
	test结束..
 * @author mrg
 *
 */
public class SyncV1 {
	public synchronized void test() {  
        System.out.println("test开始..");  
        try {  
            Thread.sleep(1000);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
        System.out.println("test结束..");  
    }  
    public static void main(String[] args) {  
    	SyncV1 sync = new SyncV1();  
        for (int i = 0; i < 3; i++) { 
        	
            Thread thread = new MyThread(sync);  
            thread.start();  
        }  
    }  
}
class MyThread extends Thread {  
	SyncV1 sync ;
    public MyThread(SyncV1 sync) {
		super();
		this.sync = sync;
	}
	public void run() {  
        sync.test();  
    }  
}  

         

/**
 * 这个是每执行一次都会创建一个SyncV2 , 而synchronized只是控制同一个对象同一时间只有一个实例能执行,
 * 所以结果是同时执行的。  
 * test2()方法,锁住的也只是一个对象,所以test()方法和test2()方法结果一致
 * 因此,执行结果为 
 * test开始..
 * test开始..
 * test开始..
 * test结束..
 * test结束..
 * test结束..
 * @author mrg
 *
 */
public class SyncV2 {
	public synchronized void test() {  
        System.out.println("test开始..");  
        try {  
            Thread.sleep(1000);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
        System.out.println("test结束..");  
    }  
	public void test2() {  
		synchronized (this) {
			System.out.println("test开始..");  
	        try {  
	            Thread.sleep(1000);  
	        } catch (InterruptedException e) {  
	            e.printStackTrace();  
	        }  
	        System.out.println("test结束..");  
		}
    }  
    public static void main(String[] args) {  
        for (int i = 0; i < 3; i++) { 
            Thread thread = new MyThreadV2();  
            thread.start();  
        }  
    }  
}
class MyThreadV2 extends Thread {  
	public void run() {  
		SyncV2 sync = new SyncV2();
        sync.test();  
    }  
}  

  

/**
 * 解释一下test(),test2()方法
 * 	这里的synchronized锁定的是一个全局的类,和static synchronized是一致的。不论有多少个对象,同一时间只有一个对象能执行方法里的代码
 * 因此结果为
* 	test开始..
	test结束..
	test开始..
	test结束..
	test开始..
	test结束..
 * @author mrg
 *
 */
public class SyncV3 {
	public  void test() {  
		synchronized (SyncV3.class) {
			System.out.println("test开始..");  
			System.out.println("当前对象:"+this);
	        try {  
	            Thread.sleep(1000);  
	        } catch (InterruptedException e) {  
	            e.printStackTrace();  
	        }  
	        System.out.println("test结束..");  
		}
    }  
	public static synchronized void test2() {  
		System.out.println("test开始..");  
        try {  
            Thread.sleep(1000);  
        } catch (InterruptedException e) {  
            e.printStackTrace();  
        }  
        System.out.println("test结束..");  
    }  
    public static void main(String[] args) {  
        for (int i = 0; i < 3; i++) { 
            Thread thread = new MyThreadV3();  
            thread.start();  
        }  
    }  
}
class MyThreadV3 extends Thread {  
	public void run() {  
		SyncV3 sync = new SyncV3();
        sync.test2();  
    }  
} 

  引自:http://blog.csdn.net/xiao__gui/article/details/8188833

4.对于vector的一些解释(是否安全)

    http://mt.sohu.com/it/d20170226/127307378_494942.shtml

    http://talentluke.iteye.com/blog/1496976

    http://blog.csdn.net/ghevinn/article/details/37764791

© 著作权归作者所有

共有 人打赏支持
学海无涯_
粉丝 16
博文 109
码字总数 52858
作品 0
邯郸
安卓开发必备知识体系:Java篇

大家好我是张拭心,自从各位朋友帮点广X开始,我发现我每天更有奔头了,走起路来也更有劲了,说啥也得更新的勤快一点。不过放心,我一定推送有价值的内容给大家,还请朋友们照旧动动手指点点...

d29h1jqy3akvx
05/10
0
0
Java程序员必读书单,家族又添新成员

点击关注异步图书,置顶公众号 每天与你分享IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 有些革命出其不意地吸引了全世界的眼球。Twitter、Linux操作系统和...

异步社区
05/09
0
0
Java怎么学?2018最新Java学习路线,技术要求与项目推荐详解!

关注小编吧!! 回顾2017年,java发展的程度超乎了我们的想象,对技术的要求也越来越高,从原先的前端,后端的分布,到现在企业要求的全栈,对于个人能力的要求是逐步提高的,那我们现在究竟...

qq_41781067
05/23
0
0
Java开发|Java新手应该怎么学习|2018年Java走势|

微信跳一跳你玩过吗,你知道怎么用Java开发出来吗?有时间可以研究一下!言归正传! 在2017回,java,发展程度超出我们的想象,对技术的要求也越来越高,从最初的前端、后端的布局,目前整个堆...

糖宝_d864
06/08
0
0
Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JS:异步 - 面试惨案

为什么会写这篇文章,很明显不符合我的性格的东西,原因是前段时间参与了一个面试,对于很多程序员来说,面试时候多么的鸦雀无声,事后心里就有多么的千军万马。去掉最开始毕业干了一年的Jav...

xmqywx
今天
0
0
Win10 64位系统,PHP 扩展 curl插件

执行:1. 拷贝php安装目录下,libeay32.dll、ssleay32.dll 、 libssh2.dll 到 C:\windows\system32 目录。2. 拷贝php/ext目录下, php_curl.dll 到 C:\windows\system32 目录; 3. p...

放飞E梦想O
今天
0
0
谈谈神秘的ES6——(五)解构赋值【对象篇】

上一节课我们了解了有关数组的解构赋值相关内容,这节课,我们接着,来讲讲对象的解构赋值。 解构不仅可以用于数组,还可以用于对象。 let { foo, bar } = { foo: "aaa", bar: "bbb" };fo...

JandenMa
今天
1
0
OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享水木年华的单曲《中学时代》@小小编辑 手机党少年们想听歌,请使劲儿戳(这里) @须臾时光:夏天还在做最后的挣扎,但是晚上...

小小编辑
今天
18
4
centos7安装redis及开机启动

配置编译环境: sudo yum install gcc-c++ 下载源码: wget http://download.redis.io/releases/redis-3.2.8.tar.gz 解压源码: tar -zxvf redis-3.2.8.tar.gz 进入到解压目录: cd redis-3......

hotsmile
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部