java多线程基础
2021-01-22 00:15
标签:进入 exec syn http ++ adp runable ted 方法 进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。 线程:线程是进程中的一个执行单元,我们程序中的代码都是由线程来执行的,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。 代码: 使用匿名内部类创建模拟买票class Ticket {// 资源类 private int number = 30; java多线程基础 标签:进入 exec syn http ++ adp runable ted 方法 原文地址:https://www.cnblogs.com/fengyangcai/p/12892655.html多线程的介绍
进程与线程
创建线程的方式
/**
*
* @author admin
* 线程创建一般有四种方式
*
*/
class MyThreadDemo1 extends Thread{
//重写run方法
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"--继承Thread的创建线程方式");
}
}
class MyTheadDemo2 implements Runnable{
//实现run方法
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"--Runnable的创建线程方式");
}
}
//实现Callable接口
//1.创建Callable接口的实现类,并实现call()方法
//2.创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
//3.使用FutureTask对象作为Thread对象的target创建并启动新线程。
//4.调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
class MyThreadDemo3 implements Callable
//ReentrantLock请查看文档说明
private Lock lock=new ReentrantLock();
/*
* public synchronized void saleTicket() { if (number > 0) {
*
* System.out.println(Thread.currentThread().getName() + "\t卖出第:" + (number--) +
* "\t还剩下:" + number); } }
*/
public void saleTicket() {
lock.lock();
try {
//这里使用if会出现虚假唤醒
//多线程交互中,必须要防止多线程的虚假唤醒,也即(判断只用while,不用if)
while(number > 0) {
System.out.println(Thread.currentThread().getName() + "\t卖出第:" + (number--) + "\t还剩下:" + number);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
/**
*
* @author admin 多线程的编程就是 在高内聚低耦合的前提下,使用线程 操作(对外暴露的调用方法) 资源类/
*
*/
public class MyThread2 {
public static void main(String[] args) {
Ticket ticket = new Ticket();
// 使用lamber表达式创建
/*
* new Thread(()->{ ticket.saleTicket(); },"aa").start(); }
*/new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i ) {
ticket.saleTicket();
}
}
},"aa").start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i ) {
ticket.saleTicket();
}
}
},"bb").start();
}
}线程的状态
上一篇:FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.me
下一篇:Java的this