Ⅰ 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去睡覺,這樣即可。 給你思路,代碼我就不寫了。