java多线程编程?java编程软件
老铁们,大家好,相信还有很多朋友对于java多线程编程和java编程软件的相关问题不太懂,没关系,今天就由我来为大家分享分享java多线程编程以及java编程软件的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
求JAVA多线程编程代码
测试过了,没问题。基本思路,实例化一个桥类,谁得到桥的可用标志谁过桥。
我第一个看到这个100分的,说实话,知道你是个学生要代码而已,线程类好久没练手了,练习一下而已,否则真不会给你写代码。因为我读书的时候也发过类似的求助,知道什么感受。不懂的时候真的没办法,所以告诉你思路。
package cn.thread;
public class Through_out_bridge{
public static void main(String[] args){
Bridge b= Bridge.getInstance();//实例化桥
//实例化左端9个人,此时所有人都不能过桥,桥的可以状态标志为不可以用
for(int i= 1; i<= 9; i++){
Thread t= new Thread(new Person(false, i, b));
t.start();
}
//实例化右端12个人,此时所有人都不能过桥,桥的可以状态标志为不可以用
for( int i=1;i<=12;i++)
{
Thread t= new Thread(new Person(true,i,b));
t.start();
}
//桥的可用状态给左端第10个人,可以自定义给谁
b.state= true;
Thread t= new Thread(new Person(false, 10, b));
}
}
class Person implements Runnable{
public Bridge bridge;//桥
private String hand;//在桥哪一端
int No;//序号
public Person(boolean side, int i, Bridge bridge){
this.No= i;
this.bridge= bridge;
if(bridge.state)
{
System.out.println(i+"已经过桥。");
}
if(side){
this.hand= new String("右");
} else{
this.hand= new String("左");
}
}
//过桥方法
public synchronized void through() throws InterruptedException{
if(bridge.state){
System.out.println(hand+"边第"+No+"在过桥");
bridge.open( No);
} else{
bridge.lock(No);
}
}
public void run(){
try{
Thread.sleep(1000);
// System.out.println(No+hand+"边已经过桥!");
through();
} catch(InterruptedException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Bridge{
//可用状态判断true:可用
public boolean state= false;
//自行实例化
public static Bridge getInstance(){
return new Bridge();
}
public synchronized void open(int i) throws InterruptedException{
if(state){
Thread.sleep(1000);
this.state=true;
notify();
}
}
public synchronized void lock(int i) throws InterruptedException{
if(!state){
this.state=false;
System.out.println(i+"在等待.");
wait();
}
}
}
什么是java多线程详解
线程对象是可以产生线程的对象。比如在Java平台中Thread对象,Runnable对象。线程,是指正在执行的一个指点令序列。在java平台上是指从一个线程对象的start()开始,运行run方法体中的那一段相对独立的过程。相比于多进程,多线程的优势有:
(1)进程之间不能共享数据,线程可以;
(2)系统创建进程需要为该进程重新分配系统资源,故创建线程代价比较小;
(3)Java语言内置了多线程功能支持,简化了java多线程编程。
一、创建线程和启动
(1)继承Thread类创建线程类
通过继承Thread类创建线程类的具体步骤和具体代码如下:
•定义一个继承Thread类的子类,并重写该类的run()方法;
•创建Thread子类的实例,即创建了线程对象;
•调用该线程对象的start()方法启动线程。
复制代码
class SomeThead extends Thraad{
public void run(){
//do something here
}
}
public static void main(String[] args){
SomeThread oneThread= new SomeThread();
步骤3:启动线程:
oneThread.start();
}
复制代码
(2)实现Runnable接口创建线程类
通过实现Runnable接口创建线程类的具体步骤和具体代码如下:
•定义Runnable接口的实现类,并重写该接口的run()方法;
•创建Runnable实现类的实例,并以此实例作为Thread的target对象,即该Thread对象才是真正的线程对象。
复制代码
class SomeRunnable implements Runnable{
public void run(){
//do something here
}
}
Runnable oneRunnable= new SomeRunnable();
Thread oneThread= new Thread(oneRunnable);
oneThread.start();
复制代码
(3)通过Callable和Future创建线程
通过Callable和Future创建线程的具体步骤和具体代码如下:
•创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
•创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
•使用FutureTask对象作为Thread对象的target创建并启动新线程。
•调用FutureTask对象的get()方法来获得子线程执行结束后的返回值其中,Callable接口(也只有一个方法)定义如下:
复制代码
public interface Callable{
V call() throws Exception;
}
步骤1:创建实现Callable接口的类SomeCallable(略);
步骤2:创建一个类对象:
Callable oneCallable= new SomeCallable();
步骤3:由Callable创建一个FutureTask对象:
FutureTask oneTask= new FutureTask(oneCallable);
注释: FutureTask是一个包装器,它通过接受Callable来创建,它同时实现了 Future和Runnable接口。
步骤4:由FutureTask创建一个Thread对象:
Thread oneThread= new Thread(oneTask);
步骤5:启动线程:
oneThread.start();
java多线程有几种实现方法
继承Thread类来实现多线程:
当我们自定义的类继承Thread类后,该类就为一个线程类,该类为一个独立的执行单元,线程代码必须编写在run()方法中,run方法是由Thread类定义,我们自己写的线程类必须重写run方法。
run方法中定义的代码为线程代码,但run方法不能直接调用,如果直接调用并没有开启新的线程而是将run方法交给调用的线程执行
要开启新的线程需要调用Thread类的start()方法,该方法自动开启一个新的线程并自动执行run方法中的内容
请点击输入图片描述
结果:
请点击输入图片描述
*java多线程的启动顺序不一定是线程执行的顺序,各个线程之间是抢占CPU资源执行的,所有有可能出现与启动顺序不一致的情况。
CPU的调用策略:
如何使用CPU资源是由操作系统来决定的,但操作系统只能决定CPU的使用策略不能控制实际获得CPU执行权的程序。
线程执行有两种方式:
1.抢占式:
目前PC机中使用最多的一种方式,线程抢占CPU的执行权,当一个线程抢到CPU的资源后并不是一直执行到此线程执行结束,而是执行一个时间片后让出CPU资源,此时同其他线程再次抢占CPU资源获得执行权。
2.轮循式;
每个线程执行固定的时间片后让出CPU资源,以此循环执行每个线程执行相同的时间片后让出CPU资源交给下一个线程执行。
关于本次java多线程编程和java编程软件的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。