Ⅰ java怎么让主线程和自定义线程之间进行多次交替运行
java中要让主复线程和自定义线制程多次交替运行,可以设置一个变量X和一把锁L,L作为操作X的锁
第一个线程在X为偶数的时候执行,第二个线程在X为基数的时候执行,线程执行完之后把X++,然后唤醒等待L的所有线程;
Ⅱ JAVA 2个循环任务20秒交换执行
//直接拷过去就能用,兄弟,要是满意不要吝啬给分哦。
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.WindowConstants;
public class ThreadTest extends JFrame implements KeyListener {
private Threada ta;
private Threada tb;
private JTextArea area;
public ThreadTest() {
area = new JTextArea();
area.addKeyListener(this);
this.add(area);
this.setBounds(200, 200, 400, 800);
this.setVisible(true);
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ThreadTest();
}
public void keyPressed(KeyEvent key) {
int code = key.getKeyCode();
System.out.println(code);
if (code == 113) {
// 这里设置显示的参数。第一个不用管了。 第二个参数是多少秒显示。第三个是显示内容
ta = new Threada(area, 1, "任务A执行10秒");
tb = new Threada(area, 1, "任务B执行10秒");
this.ta.start();
this.tb.start();
}
if (code == 120) {
this.ta.setFlag(false);
this.tb.setFlag(false);
}
}
public void keyReleased(KeyEvent key) {
// TODO Auto-generated method stub
}
public void keyTyped(KeyEvent key) {
// TODO Auto-generated method stub
}
}
class Threada extends Thread {
private JTextArea area;
private long second;
private String note;
private boolean flag = true;
/**
* 创建对象时候 设置参数
*
* @param area
* 文本域
* @param second
* 线程 隔多少秒执行一次。单位是秒
* @param note
* 在文本域中出现的内容。
*/
public Threada(JTextArea area, long second, String note) {
this.area = area;
this.second = second;
this.note = note;
}
@Override
public void run() {
while (true && flag) {
try {
Thread.sleep(second * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.area.append("\n" + note);
}
}
public void setFlag(boolean flag) {
this.flag = flag;
}
}
Ⅲ 帮忙调一下一个java程序,如何实现多线程“让 main函数正在运行”和"thread函数正在运行" 交替出现
线程是不可控制的
在CPU认为合适的时机会随机放出一个位给某个线程来占用。
所以要控制两个线程(你这里是main线程和TestThread 线程)交替出现是不可实现的
但如果只是要这样
main函数正在运行
thread函数正在运行
thread函数正在运行
thread函数正在运行
thread函数正在运行
thread函数正在运行
thread函数正在运行
thread函数正在运行
thread函数正在运行
thread函数正在运行
main函数正在运行
main函数正在运行
main函数正在运行
main函数正在运行
main函数正在运行
main函数正在运行
main函数正在运行
main函数正在运行
thread函数正在运行
那是可能会出现的
Ⅳ 谁帮我实现以下Java中的线程交替执行控制,要求按顺序输出1到100,代码如下。
稍微修改下 未测试
packagecom.leejiliang.HomeworkDemo2;
/**
*定义打印输出类,定义两个数据输出方法,分别用于输出偶数和奇数
*
*@authorAdministratoreven偶数uneven奇数
*/
classPrintNumber{
booleanisEven=true;
publicvoidprintEven(){
for(inti=0;i<=100;i=i+2){
if(i%2==0){
synchronized(this){
while(!isEven){
try{
this.wait();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("偶数:"+i);
isEven=false;
this.notify();
}
}
}
}
//输出1到100之间的奇数
publicvoidprintUnEven(){
for(inti=1;i<=99;i=i+1){
if(i%2!=0){
synchronized(this){
while(isEven){
try{
this.wait();
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
System.out.println("奇数:"+i);
isEven=true;
this.notify();
}
}
}
}
}
/**
*
*@authorAdministrator定义输出偶数的线程类
*/
{
privatePrintNumberpn=null;
publicThreadForEven(PrintNumberpn){
this.pn=pn;
}
@Override
publicvoidrun(){
pn.printEven();
}
}
/**
*定义输出奇数的线程类
*
*@authorAdministrator
*
*/
{
privatePrintNumberpn=null;
publicThreadForUneven(PrintNumberpn){
this.pn=pn;
}
@Override
publicvoidrun(){
pn.printUnEven();
}
}
//主函数,执行两个线程
classZeroToOneHundred{
publicstaticvoidmain(String[]args){
PrintNumberpn=newPrintNumber();
ThreadForEvente=newThreadForEven(pn);
ThreadForUneventu=newThreadForUneven(pn);
Threadthreadeven=newThread(te);
Threadthreaneven=newThread(tu);
threadeven.start();
threaneven.start();
}
}
Ⅳ java的多线程是交替占用CPU,不是真正的并行这个和单线程不是一样的吗为什么会效率会更高
比如某线程需要延时等待某操作完成,这时就可以用线程调度执行其他等待执行的线程,这样更完全地利用了cpu的性能,因此效率高
Ⅵ 编程JAVA 实现使用多线程数字从10到1两个线程的交替输出
class out implements Runnable
{
private int ticket = 100;
public synchronized void run()
{
while (true)
{
if (ticket>o)
{
System.out.println(Thread.currentThread().getName()+"="+"sale..."+ticket--);//若改成this.getName();不行因为接口里没有getName();
}
}
}
}
class RunnableDemo
{
public static void main(String[] args)
{
Ticket P = new Ticket();//先创造接口对象
Thread P1 = new Thread(P);//再把接口对象给Thread
Thread P2 = new Thread(P);
P1.start();
P2.start();
}
这是最基本的。。多线程里面玩的就是同步代码块。。都是手打的。。分给我吧,运行的时候运行RunnableDemo;
Ⅶ java多线程问题。两个线程交替打印。例如第一个线程打印1,接着第二个线程打印100,接着第一个线程打印2。
你这样写来两个线程实例源t1和t2间没有交互通信,各跑各的,当然不会达到你上面说的那个结果。要想达到你上面说的那个效果,必须进行线程间通信。比如,你可以让两个线程实例都对方的引用,在run函数里执行打印的方法后,就让t2跑,t1去睡觉(sleep())。等t2打印完后,又让t1跑,让t2去睡觉,这样即可。 给你思路,代码我就不写了。