1、什么是线程?线程是彼此互相独立的、能独立运行的子任务,并且每个线程都有自己的调用栈。所谓的多任务是通过周期性地将CPU时间片切换到不同的子任务,虽然从微观上看来,单核的CPU上同时只运行一个子任务,但是从宏观来看,每个子任务似乎是同时连续运行的
2、线程对象和其他的对象一样,在堆上创建、运行、死亡。但线程是一个轻量级的进程,有它自己的调用栈。
3、java程序有一个入口函数main()函数,它对应的线程被称为主线程。一个新线程一旦被创建,就产生一个新调用栈,从原主线程中脱离,也就是与主线程并发执行。
4、当提到线程时,很少是有保障的。我们必须了解到什么是有保障的操作,什么是无保障的操作,以便设计的程序在各种jvm上都能很好地工作。
Daemon线程 Daemon线程区别一般线程之处是:主程序一旦结束,Daemon线程就会结束。
Thread.currentThread()
Thread.sleep()
Thread.yield()
wait方法是java根对象Object含有的方法,表示等待获取某个锁。
在wait方法进入前,会释放相应的锁,在wait方法返回时,会再次获得某个锁。
如果wait()方法不带有参数,那只有当持有该对象锁的其他线程调用了notify或者notifyAll方法,才有可能再次获得该对象的锁。 如果wait()方法带有参数,比如:wait(10),那当持有该对象锁的其他线程调用了notify或者notifyAll方法,或者指定时间已经过去了,才有可能再次获得该对象的锁。
如果对一个null对象加锁,会产生异常。
虚拟机的线程和操作系统的线程是一一对应的
ThreadLocal方法:get()、set()、remove()、initailValue(),对应的含义是:
返回此线程局部变量的当前线程副本中的值、将此线程局部变量的当前线程副本中的值设置为指定值、移除此线程局部变量当前线程的值、返回此线程局部变量的当前线程的“初始值”。
t1线程合并到主线程中,主线程停止执行过程,转而执行t1线程,直到t1执行完毕后继续。
在main方法中执行t1.join();
java.util.concurrent.Executors类的API,这个类提供大量创建连接池的静态方法
可返回值的任务必须实现Callable接口,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object。
2、线程对象和其他的对象一样,在堆上创建、运行、死亡。但线程是一个轻量级的进程,有它自己的调用栈。
3、java程序有一个入口函数main()函数,它对应的线程被称为主线程。一个新线程一旦被创建,就产生一个新调用栈,从原主线程中脱离,也就是与主线程并发执行。
4、当提到线程时,很少是有保障的。我们必须了解到什么是有保障的操作,什么是无保障的操作,以便设计的程序在各种jvm上都能很好地工作。
Daemon线程 Daemon线程区别一般线程之处是:主程序一旦结束,Daemon线程就会结束。
Thread.currentThread()
Thread.sleep()
Thread.yield()
wait方法是java根对象Object含有的方法,表示等待获取某个锁。
在wait方法进入前,会释放相应的锁,在wait方法返回时,会再次获得某个锁。
如果wait()方法不带有参数,那只有当持有该对象锁的其他线程调用了notify或者notifyAll方法,才有可能再次获得该对象的锁。 如果wait()方法带有参数,比如:wait(10),那当持有该对象锁的其他线程调用了notify或者notifyAll方法,或者指定时间已经过去了,才有可能再次获得该对象的锁。
如果对一个null对象加锁,会产生异常。
虚拟机的线程和操作系统的线程是一一对应的
ThreadLocal方法:get()、set()、remove()、initailValue(),对应的含义是:
返回此线程局部变量的当前线程副本中的值、将此线程局部变量的当前线程副本中的值设置为指定值、移除此线程局部变量当前线程的值、返回此线程局部变量的当前线程的“初始值”。
t1线程合并到主线程中,主线程停止执行过程,转而执行t1线程,直到t1执行完毕后继续。
在main方法中执行t1.join();
java.util.concurrent.Executors类的API,这个类提供大量创建连接池的静态方法
可返回值的任务必须实现Callable接口,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object。