什么是线程以及多线程的应用

使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程。

举例:

package Threads;

/**
* Created by hanzhixiong on 2017/10/11.
*/
public class ExtendsThread extends Thread {
public void run(){
for (int i = 0; i < 5; i++) {
System.out.println("1212");
}
}

public static void main(String[] args) {
ExtendsThread t1 = new ExtendsThread();
ExtendsThread t2 = new ExtendsThread();
t1.start();
t2.start();
}
}
package Threads;

/**
* Created by hanzhixiong on 2017/10/11.
*/
public class ImplementRunnable implements Runnable {

@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("1212");
}
}
public static void main(String[] args) {
Thread t1= new Thread(new ImplementRunnable());
Thread t2= new Thread(new ImplementRunnable());
t1.start();
t2.start();
}
}
1、线程的名字,一个运行中的线程总是有名字的,名字有两个来源,一个是虚拟机自己给的名字,一个是你自己的定的名字。在没有指定线程名字的情况下,虚拟机总会为线程指定名字,并且主线程的名字总是mian,非主线程的名字不确定。
2、线程都可以设置名字,也可以获取线程的名字,连主线程也不例外。
3、获取当前线程的对象的方法是:Thread.currentThread();
4、在上面的代码中,只能保证:每个线程都将启动,每个线程都将运行直到完成。一系列线程以某种顺序启动并不意味着将按该顺序执行。对于任何一组启动的线程来说,调度程序不能保证其执行次序,持续时间也无法保证。
5、当线程目标run()方法结束时该线程完成。
6、一旦线程启动,它就永远不能再重新启动。只有一个新的线程可以被启动,并且只能一次。一个可运行的线程或死线程可以被重新启动。
7、线程的调度是JVM的一部分,在一个CPU的机器上上,实际上一次只能运行一个线程。一次只有一个线程栈执行。JVM线程调度程序决定实际运行哪个处于可运行状态的线程。
众多可运行线程中的某一个会被选中做为当前线程。可运行线程被选择运行的顺序是没有保障的。
8、尽管通常采用队列形式,但这是没有保障的。队列形式是指当一个线程完成“一轮”时,它移到可运行队列的尾部等待,直到它最终排队到该队列的前端为止,它才能被再次选中。事实上,我们把它称为可运行池而不是一个可运行队列,目的是帮助认识线程并不都是以某种有保障的顺序排列唱呢个一个队列的事实。
9、尽管我们没有无法控制线程调度程序,但可以通过别的方式来影响线程调度的方式。
 注意:
1. 【实例】线程池不允许使用 Executors去创建 而是通过 ThreadPoolExecutor 的方式,这样 的方式,这样的处理方式让写同学更加明确线程池运行规则,避资源耗尽风险。
关于线程池的讲解和使用在下一章节中会详解。

SimpleDateFormat 是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。 正例:注意线程安全,使用DateUtils。亦推荐如下处理:
private static final ThreadLocal<DateFormat> df = new ThreadLocal<DateFormat>() {
@Override
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};

如果是JDK8的应用,可以使用Instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替Simpledateformatter,官方给出的解释:simple beautiful strong immutable thread-safe。

 
 
 
学习自:http://lavasoft.blog.51cto.com/62575/99151/
http://www.cnblogs.com/wxd0108/p/5479442.html
posted @ 2017-10-11 09:16  熊窝窝  阅读(432)  评论(0编辑  收藏  举报