Thread.currentThread().getName()
同步代码块
同步函数
代码块和函数的同步
函数是通过this来做标志位的选择
死锁
线程间的通信的问题。
wait()
notify()
notify All
怎么样控制其生命周期
实现多线程的2种方式:1.从Thread类继承 2.实现Runnable的接口
一般推荐使用第二种方法
static Thread currentThread()方法 可以获取当前正在执行的线程
getName( ) 得到线程的名字 这个方法是从Thread类中继承而来
要新建立一个线程,必须建立Thread的一个派生类,派生类中重写 run的方法,线程的代码放在run方法中
新建立了一个线程的实例 要想启动这个线程 必须用start()方法 启动了start方法 JVM会自动run方法
SetDaemon(true/false)设置后台线程 而且必须在Start()之前就必须调用
static void yield() 可以让一个线程暂停,让其他线程执行
getPriority() 得到线程的优先级
setPriority(参数) 设置线程的优先级 参数可为: static int MAX_PRIORITY 用表示10
static int MIN_PRIORITY 用表示 1
static int NORM_PRIORITY 用5表示
一个内部类来继承Thread方法
package Test;
public class machine
{
public static void main(String [] args)
{
MyThread pa=new MyThread();
pa.getInner().start();
System.out.println("thr Thread name is:"+Thread.currentThread().getName());
}
}
class MyThread
{
private class InnerThread extends Thread
{
public void run()
{
System.out.println(Thread.currentThread().getName());
}
}
Thread getInner()
{
return new InnerThread();
}
}
用实现Runnable的方法如下
package Test;
public class machine
{
public static void main(String [] args)
{
MyThread pa=new MyThread();
new Thread(pa).start();
System.out.println("the Thread name is:"+Thread.currentThread().getName());
}
}
class MyThread implements Runnable
{
public void run()
{
System.out.println("the thread name is "+Thread.currentThread().getName());
}
}
同步的两种方式:1同步块 2 同步方法
每一个对象都监视器 或者叫锁 同步块的实现模式
同步的方法是利用this所代表对象的锁 同步方法的实现模式
每个class也有一个锁,是这个class对象的Class对象的锁 抽象的类的同步实现
练习 火车票售票系统
package Test;
public class machine
{
public static void main(String [] args)
{
sellThread p= new sellThread();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
new Thread(p).start();
}
}
class sellThread implements Runnable
{ int ticket=100;
Object obj= new Object();
public void run()
{
while(true)
{
synchronized(obj)
{
if(ticket>0)
{
System.out.println(Thread.currentThread().getName()+"sell the "+ticket);
ticket--;
}
}
}
}
}
解决死锁问题用到的函数
wait( ) notify() notifyAll() 这个3个方法是Object中的方法 不是Thread中的方法 ,而且只能在同步方法或者同步块中调用
这三个函数主要用于producer-consumer关系
线程的终止: 设置flag变量 结合 interrupt()方法