java线程
进程:正在运行的程序
线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少一个线程.
一个程序至少一个进程,一个进程可以包括多个线程.
程序运行原理
分时调度: 所有线程轮流使用CPU
抢占式调度: 优先让优先级高的线程使用CPU,优先级相同的,随机选择一个java线程.
线程
thead()
一种方法是声明thread的子类.该子类应该重写thread类的run方法.创建对象,开启线程.run方法相当于其他线程的main方法
另一种声明RUNable的接口,然后去实现它.
###继承
//Mythread
/**
* @Author ShangKeJie
* @Class BigData182
* @Date 2019/10/24 - 8:11
*/
/*
1.定义一个类继承Thread类
2.重写run方法
3.创建子类对象
4.调用子类对象的start方法,开启线程并执行告诉jvm开启一个线程调用run方法
*/
public class MyThread extends Thread{
@Override
public void run() {
for (int i=0;i<50;i++){
System.out.println("thread"+i);
}
}
@Override
public synchronized void start() {
super.start();
}
//if 需要执行的代码比较耗时,我们就可以为他单独创建一个线程
public void fun(){
for (int i=0;i<10;i++){
System.out.println(i);
}
}
}
/**
* @Author ShangKeJie
* @Class BigData182
* @Date 2019/10/24 - 8:37
*/
public class Test1 {
public static void main(String[] args) {
MyThread mt1=new MyThread();
MyThread mt2=new MyThread();
mt1.start();
mt2.start();
/* mt1.fun();
mt2.fun();*/
for (int i=0;i<100;i++){
System.out.println("main"+i);
}
}
}
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DkY5pC9i-1573690646498)(./Annotation 2019-10-24 085930.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mc5WukxA-1573690646499)(./1571879686080.png)]
实现接口
/**
* @Author ShangKeJie
* @Class BigData182
* @Date 2019/10/24 - 9:15
*/
public class MyRunnable extends Thread {
@Override
public void run() {
for (int i=0;i<50;i++){
System.out.println(Thread.currentThread().getName()+"-thread-"+i);
}
}
@Override
public synchronized void start() {
super.start();
}
}
/**
* @Author ShangKeJie
* @Class BigData182
* @Date 2019/10/24 - 9:15
*/
public class MyRunTest {
public static void main(String[] args) {
MyRunnable mr1=new MyRunnable();
Thread t1=new Thread(mr1,"run1");//开启一个线程,并给他重命名
Thread t2=new Thread(mr1,"run2");//又开启一个线程,并给他重命名
t1.start();
t2.start();
for (int i=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+"--"+i);
}
}
}
买票系统
/**
* @Author ShangKeJie
* @Class BigData182
* @Date 2019/10/24 - 9:24
*/
public class TicketSell extends Thread {
private int num=100;
public void run(){
while (true){
if (num>0){
System.out.println(Thread.currentThread().getName()+"正在出售,第"+(num--)+"张票");
}
else{
break;
}
}
}
}
/**
* @Author ShangKeJie
* @Class BigData182
* @Date 2019/10/24 - 9:26
*/
public class TicketSellTest {
public static void main(String[] args) {
TicketSell ts1=new TicketSell();
TicketSell ts2=new TicketSell();
TicketSell ts3=new TicketSell();
ts1.setName("窗口1");
ts2.setName("窗口2");
ts3.setName("窗口3");
ts1.start();
ts2.start();
ts3.start();
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e2ntC9jf-1573690646500)(./1571880659278.png)]