Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
89 / 84 / 12
Регистрация: 08.08.2013
Сообщений: 667
1

Класс в отдельном потоке

22.12.2014, 16:59. Показов 2909. Ответов 8
Метки нет (Все метки)

Не пинайтесь, знаю, тема жеванная, но ...
В общем есть класс со своими методами, конкретней это работа с БД mysql.

Вот примерный класс BD.java

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class BD extends Thread{
...
}
public void metod1(){//ПЕРВЫЙ МЕТОД
...
}
public void metod2(String s){//ВТОРОЙ МЕТОД
...
}
@Override
    public void run(){
      
    }
Вот второй класс, главный - my.java
Java
1
2
3
4
5
6
....
//Сначала я создаю экемпляр класса BD
BD bd = new BD();
//Запускаю поток
bd.start();
....
Как мне теперь вызвать metod1 из экземпляра класса BD в новом потоке?
Ведь в потоке выполняется всё что находится в методе run, правильно?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2014, 16:59
Ответы с готовыми решениями:

Пропарсить XML в отдельном потоке
Пытаюсь пропарсить xml в отделном потоке: ошибок не получаюю но и результата нет. цифры "1234567"...

Создание файла в отдельном потоке
Как создавать файл и работать с ним в отдельном потоке? код new Thread(new Runnable() {...

Выполнение в отдельном потоке
Необходимо реализовать выполнение данного класса в отдельном потоке. У меня никак не выходит,...

Ввод данных в отдельном потоке
Здравствуйте, нужно реализовать ограничение во времени при ввода ответа на вопрос. Но даже когда...

8
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
23.12.2014, 01:41 2
Цитата Сообщение от _Night_Scream_ Посмотреть сообщение
Ведь в потоке выполняется всё что находится в методе run, правильно?
всё что в методе run, и всё что там вызовется тоже.
Надо просто вызвать metod1 в методе run()
1
89 / 84 / 12
Регистрация: 08.08.2013
Сообщений: 667
23.12.2014, 22:15  [ТС] 3
Это я понимаю... что надо вызывать в run.
Я не понимаю как можно из другого класса вызвать metod1
Я же не могу написать bd.metod1
Как его вызвать? Можно пример? В голове никак не укладывается.
0
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
23.12.2014, 22:18 4
_Night_Scream_, я не понимаю, в чем ваша проблема, и что вы хотите сделать.

Надо вызвать method1? Так вызывайте
Java
1
2
BD bd = new BD();
bd.method1();
Надо запустить поток? Запускайте
Java
1
2
BD bd = new BD();
bd.start();
Вроде всё просто.
1
89 / 84 / 12
Регистрация: 08.08.2013
Сообщений: 667
23.12.2014, 23:26  [ТС] 5
turbanoff, Я хочу чтобы код который в metod1 класса BD выполнялся в отдельном потоке.
При bd.method1() код будет выполняться в потоке из которого вызывается.

Итак, есть класс BD
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class BD extends Thread{
...
}
public void metod1(){//ПЕРВЫЙ МЕТОД
...
}
public void metod2(String s){//ВТОРОЙ МЕТОД
while(true){
//ничего не делаем
}
}
@Override
    public void run(){
      
    }
Есть другой класс в котором
Java
1
2
3
4
5
6
7
public static void main(String[] args) {
        BD bd = new BD();
        bd.start();//ТУТ СТАРТОВАЛ ВТОРОЙ ПОТОК
        bd.metod2("string"); //Я ХОЧУ ВЫПОЛНИТЬ ЭТОТ МЕТОД ВО ВТОРОМ ПОТОКЕ
        System.out.prinln("ЭТА СТРОКА НИКОГДА НЕ ВЫВЕДЕТСЯ");
    }    
}
Фактически metod2 должен выполниться в run, я не понимаю как подсовывать в run методы с аргументами((
Тоесть есть класс, со своим отдельным потоком, у этого класса есть 100500 методов у каждого метода по 100500 аргументов вот этими методами я и хочу рулить из другого класса.
0
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
24.12.2014, 00:22 6
Создайте еще один класс, в который вы сможете передать аргументы для нужного вам метода и еще ссылку на bd.
Например, вот так с помощью анонимного класса
Java
1
2
3
4
5
6
7
8
        final BD bd = new BD();
        Thread method2Thread = new Thread(new Runnable() {
            @Override
            public void run() {
                bd.metod2("string");
            }
        });
        method2Thread.start();
1
7 / 7 / 4
Регистрация: 15.12.2014
Сообщений: 17
24.12.2014, 15:54 7
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Main {
    public static void main(String[] args) {
        new Thread(Main::method1) {{
            start();
            new Thread(Main::method2) {{
                start();
            }}.join();
        }}.join();
    }
 
    private static void method1() {System.out.println("m1");}
 
    private static void method2() {System.out.println("m2");}
}
method1() и method2() в новых потоках вызвались.
1
89 / 84 / 12
Регистрация: 08.08.2013
Сообщений: 667
25.12.2014, 11:09  [ТС] 8
MrKvant, интересно, а где можно почитать об этом? Такого подхода я не встречал. Что гуглить?
0
Эксперт Java
4075 / 3809 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
25.12.2014, 12:34 9
_Night_Scream_, Вы про method references? http://docs.oracle.com/javase/... ences.html
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2014, 12:34

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Класс в отдельном потоке
Всем доброго дня и хорошего настроения! :) Подскажите, у меня есть класс Calculate как его...

Класс в отдельном потоке
Привет. Мне нужно, чтобы класс выполнялся в отдельном потоке. #include <iostream> #include...

Создать приложение, в отдельном потоке вычисляющее значение w и непрерывно обновляющее его в потоке
Ребят, с потоками не работал не когда. Есть задание , я понимаю что хотят, а вот как сделать...

GDI+. Почему в отдельном потоке картинки сохраняются как белые прямоугольники, а в основном потоке - всё Ок?
Всем привет, делаю функцию уменьшения картинок при помощи библиотеки GDI+, в отдельном потоке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.