1.多线程是在一个进程中执行多个程序(任务)(单程序按顺序进行是单线程)
2.使用方法:
1.创建类继承Thread类,重写run()方法;
setName();设置线程名称
setPriority();设置优先级
sleep();睡眠
1.加入线程:join();等该线程执行完了其他才执行
2.礼让线程:yield();交替进行(不稳定)
3.后台进程:setDeamo();主线程结束,后台进程结束
2实现Runable接口,重写run()方法
3.synchronized (obj) {}线程上锁,避免重复执行。synchronized //同步关键字
同步代码块:
@Override
public void run() {
while (true) {
//线程上锁
synchronized (obj) {
if (tickets > 0) {
try {
//Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + "正在出售(" + tickets-- + ")张票");
continue;
}
else{
Thread.interrupted();
}
System.out.println(Thread.currentThread().getName()+"售票完毕");
break;
}
}
}
同步方法:
public void run() {
while (true) {
// 线程上锁
synchronized (this) {
Sells();
}
}
}
private synchronized void Sells() {
if (tickets > 0) { System.out.println(Thread.currentThread().getName() + "正在出售(" + tickets-- + ")张票");
}
}
静态方法的同步:
public void run() {
while (true) {
// 线程上锁
synchronized (TicketRunnable.class) {
Sells();
}
}
}
private static synchronized void Sells() {
if (tickets > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + "正在出售(" + tickets-- + ")张票");
}
}