1.创建多线程
继承Thread重写run
package step1;
public class CreateThreadPractice {
public static void main(String[] args) {
MyThread myThread = new MyThread();
// ---------------------Begin------------------------
//开启线程
myThread.start();
// ---------------------End------------------------
}
}
// ---------------------Begin------------------------
//继承Thread编写名为MyThead的类,代码内容为循环输出10遍: 线程在运行......
class MyThread extends Thread{
public void run()
{
for(int i=0;i<10;i++) System.out.println("线程在运行......");
}
}
// ---------------------End------------------------
2.使用Callable接口创建多线程
package step2;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
// ---------------------Begin------------------------
//tips: 输出语句为:Thread.currentThread().getName()+"的call()方法在运行"
//定义一个实现Callable接口的实现类,类名必须命名为MyThread_callable
// ---------------------End------------------------
public class CallableExample {
public static void main(String[] args) throws Exception,
ExecutionException {
// 创建Callable接口的实现类对象
MyThread_callable myThread3 = new MyThread_callable();
// 使用FutureTask封装Callable接口
FutureTask<Object> ft1 = new FutureTask<>(myThread3);
// 使用Thread(Runnable target ,String name)构造方法创建线程对象
Thread thread1 = new Thread(ft1, "thread1");
// 创建并启动另一个线程thread2
FutureTask<Object> ft2 = new FutureTask<>(myThread3);
Thread thread2 = new Thread(ft2, "thread2");
// ---------------------Begin------------------------
// 调用线程对象的start()方法启动线程
thread1.start();
Thread.sleep(1000);
thread2.start();
Thread.sleep(1000);
// 可以通过FutureTask对象的方法管理返回值
System.out.println("thread1返回结果:"+ft1.get());
System.out.println("thread2返回结果:"+ft2.get());
// ---------------------End------------------------
}
}
class MyThread_callable implements Callable<Object>{
// @Override
public Object call() throws Exception{
for(int i=0;i<5;i++) System.out.println(Thread.currentThread().getName()+"的call()方法在运行");
return Thread.currentThread().getName();
}
}
3.使用Runable接口创建多线程
package step3;
// ---------------------Begin------------------------
//定义一个实现Runnable接口的实现类,类名必须命名为MyThread_runable
//tips: 输出语句为:Thread.currentThread().getName()+"的run()方法在运行"
class MyThread_runable implements Runnable{
@Override
public void run(){
for(int i=0;i<3;i++) System.out.println(Thread.currentThread().getName()+"的run()方法在运行");
}
}
// ---------------------End------------------------
// ---------------------End------------------------
4.多线程中的售票问题
package step4;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class SellTicket extends Thread {
//多线程共享资源,票数为30张
private static ReentrantLock lock = new ReentrantLock();
private static int ticket = 30;
@Override
public void run() {
while (true) {
try {
lock.lock();
if (ticket > 0) {
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
// TODO 自动生成的 catch 块
e1.printStackTrace();
}
System.out.println("卖出了第" + ticket + "张票");
ticket--;
} else {
System.out.println("票卖完了");
System.exit(0);
}
} finally {
lock.unlock();
}
}
// ---------------------End------------------------
}
}
/********* End *********/
5.
因篇幅问题不能全部显示,请点此查看更多更全内容