1.定义线程的两种传统方式。
package thread;
public class TradionalThreadTest
{
public static void main(String[] args)
{
//线程创建方法1:new thread的子类
new Thread(){
@Override
public void run()
{
while(true){
System.out.println("current thread(子类) is " + Thread.currentThread().getName());
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}.start();
//线程创建方法2:new Runnable作为参数(一般采用这个)
//如果两种方法都采用了,根据面向对象方法只会进行子类的run方法。
new Thread(new Runnable() {
public void run()
{
while(true){
System.out.println("current thread(runnable) is " + Thread.currentThread().getName());
try
{
Thread.sleep(2000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}){
@Override
public void run()
{
while(true){
System.out.println("current thread(子类2) is " + Thread.currentThread().getName());
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
}.start();
}
}
2. 定时器 timer,timetask类
3. 线程互斥(synchronized),wait与notify通信。
4. 线程数据共享方式见附件(QQ图片20140716223607.jpg)
5. ThreadLocal类共享线程间数据变量。利用ThreadLocal把共享对象封装起来(类似单例的实现方式)
class ThreadScopeStudent{
private String name;
private Long id;
private static ThreadLocal<ThreadScopeStudent> map = new ThreadLocal<ThreadScopeStudent>();
private ThreadScopeStudent(){
}
public static ThreadScopeStudent getThreadStudent(){
ThreadScopeStudent student = map.get();
if(null == student){
student =new ThreadScopeStudent();
map.set(student);
}
return student;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
}
---课程 来自 张孝祥老师