博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础知识篇
阅读量:6238 次
发布时间:2019-06-22

本文共 3914 字,大约阅读时间需要 13 分钟。

hot3.png

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

转载于:https://my.oschina.net/u/1178126/blog/914002

你可能感兴趣的文章
CentOS 6.x 快速安装L2TP ***
查看>>
浅谈Listview中Adpter的用法
查看>>
设计模式----代理模式
查看>>
基于Socket的文件传输(使用CSocket类)
查看>>
搭建邮件服务器准备工作
查看>>
介绍一款开源的类Excel电子表格软件
查看>>
linux磁盘及文件系统管理进阶
查看>>
如何编写更好的SQL查询:终极指南-第三部分
查看>>
Apache
查看>>
集群(3)
查看>>
网上商城bug总结
查看>>
小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。(PHP版本)
查看>>
LAMP
查看>>
金恒威10口M12车载工业交换机
查看>>
OSPF
查看>>
selenium登陆QQ邮箱出现appid is invalid
查看>>
重放***之无线门铃
查看>>
url地址栏编码
查看>>
loadrunner analysis graph settings
查看>>
animationFromTop
查看>>