文档章节

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

© 著作权归作者所有

共有 人打赏支持
学海无涯_
粉丝 15
博文 111
码字总数 53170
作品 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 Web开发,当时并不想考研,所以当时的学习是以就业为主,现在我大三了,学习Java Web开发已经一年了,因为种种原因,决定要考研,所以...

Jivanmoon
08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

storm drpc实例

序 本文主要演示一下storm drpc实例 配置 version: '2'services: supervisor: image: storm container_name: supervisor command: storm supervisor -c storm.......

go4it
23分钟前
0
0
官宣 | Chrome 70正式向所有HTTP网站发出红色“不安全”警告!

10月17日,坐拥10亿用户的Chrome浏览器正式上线70版本。作为第一个采用TLS1.3正式版的Chrome版本,在安全新功能方面,Chrome 70进一步升级了HTTP页面“不安全”显示标识,即当用户输入数据时...

亚洲诚信
24分钟前
1
0
mysql 数据类型及占用字节数

数字类型 TINYINT                           1 字节 SMALLINT                          2 个字节 MEDIUMINT                         3 个字节...

会游泳的鱼_
今天
6
0
高性能mysql:创建高性能的索引

性能优化简介 MySQL性能定义为完成某件任务所需要的时间量度,换句话说,性能即响应时间,这是一个非常重要的原则。我们通过任务和时间而不是资源来测量性能。数据库服务器的目的是执行SQL语...

背后的辛酸
今天
8
0
HTTP get、post 中请求json与map传参格式

import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;im......

寒风中的独狼
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部