// 18.1线程简介
//进程
//每一个进程都可以包含多种线程 多线程同时进行(并发机制)
//线程的特点
//1.进程是资源分配的最小单位,线程是最小的执行单位
//2.一个进程可以有多个线程
//3.线程共享进程资源
// 18.2.1 继承Thread类
//Thread类就是JAVA中的线程
public class Mytest {
public static void main(String[] args) {
Thread a = new ThreadA();
a.start();//线程执行
Thread b = new ThreadB();
b.start();//线程执行
}
}
//线程的并发效果
class ThreadA extends Thread{ //创建线程A
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.println(i);
try {
Thread.sleep(1000);//休眠1000毫秒(停顿一秒) 线程每隔一秒停顿一下
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class ThreadB extends Thread{//创建线程B
@Override
public void run() {
for (char i = 'a'; i < 'z'; i++) {
System.out.println(i);
try {
Thread.sleep(1000);//休眠1000毫秒(停顿一秒) 线程每隔一秒停顿一下
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
// 18.2.2实现Runnable接口
//Runnable接口
//利用Runnable创建线程
//public class ThreadTest extends Thread{public void run(){}}
// 继承Thread类
//public class ThreadTest extends Object implements Runnables{public void run(){}}
// 实现Runnable接口
//Thread t = new Thread(Runnable obj);
// t.start();
18.3线程的生命周期
18.4.1线程的休眠
//语法 Thread.sleep(1000);线程休眠1000毫秒(1秒)
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
try {
Thread.sleep(1000);//让程序停顿效果 写在哪里,哪里就停顿
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// 18.4.2线程的加入
//线程对象.join() 等待该线程终止,原线程才继续运行
//线程对象.join(millis) 最久等多少毫秒,超时不等
// 18.4.3线程的中断
//语法:线程对象.interrupt(); 谁调用,谁中断
// 18.5线程的优先级
//设置线程优先级
//效果并不明显
public class Mytest {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
MyThread t1 = new MyThread("加","+");
t1.setPriority(Thread.MIN_PRIORITY);
MyThread t2 = new MyThread("减","—");
t2.setPriority(3);//设置线程优先级
MyThread t3 = new MyThread("乘","×");
t3.setPriority(8);
MyThread t4 = new MyThread("除","÷");
t4.setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
}
class MyThread extends Thread{
String name;
String output;
MyThread(String name, String output) {
this.name = name;
this.output = output;
}
@Override
public void run() {
System.out.println(name+":"+output);
}
}
18.6.2线程的同步
public class Mytest implements Runnable{
int num = 10;//票池
public static void main(String[] args) {
Mytest m = new Mytest();
Thread t1 = new Thread(m,"线程一");
Thread t2 = new Thread(m,"线程二");
Thread t3 = new Thread(m,"线程三");
Thread t4 = new Thread(m,"线程四");
t1.start();
t2.start();
t3.start();
t4.start();
}
public void run() {
while(true) {
synchronized(this) {//同步代码块
if (num>0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("票数"+num--);
}
}
}
}
}