Java多线程编程七(单例模式)

饿汉模式(立即加载)

“饿汉模式”也就是立即加载,在使用类时对应的对象已经创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MySingleton  {
private static MySingleton mySingleton = new MySingleton();

private MySingleton() {
}

public static MySingleton getInstance() {
return mySingleton;
}

public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
new Thread(new Runnable() {
public void run() {
System.out.println(Thread.currentThread().getName() + " " + MySingleton.getInstance().hashCode());
}
}).start();
}
}
}

Java多线程编程五(线程间通信之ThreadLocal)

变量值的共享可以使用public static变量的形式,所有的线程都是用同一个public static变量。如果想实现每一个线程都有自己共享变量该如何解决呢?JDK中提供的类ThreadLocal正是为了解决这样的问题。
ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以存储每个线程的私有数据。

Java多线程编程三(volatile关键字)

  • 禁止编译器重排
  • 禁用寄存器,能够即使刷新内存数据更新

Java语言中的volatile变量可以被看作是一种程度较轻的synchronized;与synchronized块相比,volatile变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是synchronized的一部分。

Java volatile详解

内存可见性

可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉。在单线程环境中,如果向某个变量先写入值,然后在没有其他写入操作的情况下读取这个变量,那么总能得到相同的值。这看起来很自然。然而,当读操作和写操作在不同的线程中执行时,情况却并非如此,这听起来或许有些难以接受。通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。

Java引用类型

StrongReference 强引用

  • 回收时机:从不回收
  • 使用:对象的一般保存
  • 生命周期:JVM停止的时候才会终止

测试

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
32
33
34
server {
listen 80;
server_name www.laravel.com;
index index.html index.htm index.php;
root /data/www/laravel/public;
server_name_in_redirect off;

location / {
try_files $uri $uri/ /index.php?$query_string;
}

location ~ .+\.php($|/)
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;

fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
client_max_body_size 20m; #客户端上传文件大小限制设为20M
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
#伪静态及日志
error_log /data/www/logs/laravel-error.log;
access_log /data/www/logs/laravel-access.log;
}

Powered by AppBlog.CN     浙ICP备14037229号

Copyright © 2012 - 2020 APP开发技术博客 All Rights Reserved.

访客数 : | 访问量 :